Runnable接口的 run() 方法和start()方法

简介: Runnable接口的 run() 方法和start()方法

1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行,等待分配到CPU后继续执行未完的run()方法。 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。即分配到cpu时执行未完的run()函数。

2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码; 程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。

@Test
public void RunnableTest()  throws InterruptedException {
    Runner1 runner1 = new Runner1();
    Runner2 runner2 = new Runner2();
//        Thread(Runnable target) 分配新的 Thread 对象。
    Thread thread1 = new Thread(runner1);
    Thread thread2 = new Thread(runner2);
//        thread1.start();
//        thread2.start();
    thread1.run();
    thread2.run();
    System.out.print("阻塞当前线程,直到倒数计数器倒数到0");
    new CountDownLatch(1).await();
}
class Runner1 implements Runnable { // 实现了Runnable接口,jdk就知道这个类是一个线程
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                TimeUnit.SECONDS.sleep(1);
                System.out.println("进入Runner1运行状态——————————" + i);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class Runner2 implements Runnable { // 实现了Runnable接口,jdk就知道这个类是一个线程
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                TimeUnit.SECONDS.sleep(2);
                System.out.println("进入Runner2 运行状态——————————" + i);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Lambda

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "新建线程");
    }
}
).start();
new Thread(() -> System.out.println(Thread.currentThread().getName() + "新建线程")).start();

 

目录
相关文章
|
3月前
|
Java
Thread 类中的start() 和 run() 方法有什么区别
【8月更文挑战第9天】Thread 类中的start() 和 run() 方法有什么区别
227 0
|
4月前
run()方法和start()方法测试解析
run()方法和start()方法测试解析
|
6月前
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?
Thread 类中的 start () 和 run () 方法的区别
Thread 类中的 start () 和 run () 方法的区别
65 0
|
6月前
|
Java
多线程中的run方法和start方法有什么区别?
多线程中的run方法和start方法有什么区别?
101 0
|
安全 Java API
为什么启动线程不直接调用run(),而要调用start(),如果调用两次start()方法会有什么后果
1位工作6年的小伙伴去某里P6一面,被问到这样一道面试题,说,为什么启动一个线程不直接调用run()方法,而要调用start()方法来启动,如果调用两次start()会有什么后果?
115 0
|
Java
Java线程中的run()和start()区别
Java线程中的run()和start()区别
87 0
|
Java
Java Thread 中run()方法和start()方法的区别
Java Thread 中run()方法和start()方法的区别
99 0
|
Java Linux
Thread start 源码揭秘
Thread start 源码揭秘 public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the future may have to also be added to the VM. * * A ze
208 0