312Thread的常用方法sleep和313创建多线程的第二种方式实现Runna接口

Thread的常用方法sleep

sleep:sleep方法可以让线程进入到Waiting状态,并且不占用CPU资源,但是不释放锁,直到规定时间后再执行,休眠期间如果被中断,会抛出异常并清除中断状态。

publc static void sleep( Long millis):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。毫秒数结束之后,线程继续执行

这个sleep的方法大家很常见也很常用,也别是刚开始玩代码的时候,很喜欢测试一些逻辑的时候,sleep一下。

sleep 有啥用:

让线程在我们要它执行的时候执行,如果我们不要,那就让它睡,不占用 CPU 资源。

那么其实在使用多线程的时候,很容易关联到 锁的使用 ,synchronized 和 Lock这些 。

那么该篇文章其实核心内容是想让大家知道,sleep 与 锁资源之间的关系。

    public static void main(String[] args){
        for (int i = 1; i <10 ; i++) {
            System.out.println(i);
        }try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public class ThreadSleep extends Thread {

    @Override
    public void run() {
        System.out.println("ThreadSleep begin " + System.currentTimeMillis());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }        
        System.out.println("ThreadSleep end " + System.currentTimeMillis());
    }

    public static void main(String[] args) {
        new ThreadSleep().start();
    }

}

创建多线程的第二种方式实现Runna接口

采用java. lang Runnable也是非常常见的一种,我们只需要重写run方法即可

步骤如下

1.定义 Runnable接口的实现类,并重写该接口的run(方法,该run(方法的方法体同样是该线程的线程执行体。

2.创建 Runnable实现类的实例,并以此实例作为 Thread的 target来创建 Thread对象,该 Thread对象才是真正的线程对象。

3调用线程对象的 start(方法来启动线程。

/**
 * 描述:
 * 1.实现Runnable接口方式创建多线程
 * @author 闲走天涯
 * @create 2021/3/16 14:45
 * 创建一个线程,最简单的方法是创建一个实现 Runnable 接口的类。
 * 为了实现 Runnable,一个类只需要执行一个方法调用 run()
 */
public class TestRunnable implements Runnable{
    private Integer num=100;

    @Override
    public void run() {
        while (num <= 100) {
            try {
                Thread.sleep(300);
                num--;
                System.out.println("余票数:" + num);
                if (num <= 0){break;}
            }catch (Exception e){
                System.out.println("异常,退出循环");
                break;
            }
        }
    }

    public static void main(String[] args) throws Exception{
        TestRunnable runnable = new TestRunnable();
        new Thread(runnable).start();
        Thread.sleep(250);
        TestRunnable runnable2 = new TestRunnable();
        new Thread(runnable2).start();
        Thread.sleep(1000);
        TestRunnable runnable3 = new TestRunnable();
        new Thread(runnable3).start();

        new Thread(()->System.out.println("java 8")).start();
    }
}
/*
建多线程程序的第二种方式:
实现 Runnable接口java. Lang RunnableRunnable接口应该由那些打算通过某一线程执行其实例的类来实现。
类必须定义一个称为rn的无参数方法。
java.Lang. Thread类的构造方法Thread( Runnable target)分配新的 Thread对象。
Thread( Runnable target, String name)分配新的 Thread对象。
实现步骤:
1.创建一个 Runnable接口的实现类
2.在实现类中重写 Runnable接口的run方法,设置线程任务
3.创建一个 Runnable接口的实现类对象
4.创建 Thread(类对象,构造方法中传递 Runnable接口的实现类对象
5.调用 Threa类中的 start方法,开启新的线程执行run方法
 */
public class demo05 {
    public static void main(String[] args) {
        RunnableImopl r = new RunnableImopl();
        Thread t = new Thread();
        t.start();

        for (int i = 0; i <20 ; i++) {
            System.out.println(Thread.currentThread().getName()+"---》"+i);
        }
    }
}

class RunnableImopl implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i <20 ; i++) {
            System.out.println(Thread.currentThread().getName()+"---》"+i);
        }
    }
}

 

posted @ 2022-07-08 10:08  ja不会va  阅读(52)  评论(0)    收藏  举报