线程的 run() 和 start() ; 太骚了 ~~

文:线程的 run() 和 start() ; 太骚了 ~~
注:本文转载于:CodeCow · 程序牛 的小我私家博客:http://www.codecow.cn/
   《 似水流年,什么都市变,什么又都不会变 ——勿忘初心,继续前行 

  继上一篇 “头发都白了,才知道若何实现多线程 “,有小伙伴私聊小编,线程的 run() 和 start() 有什么 区别 ,空闲之余,写下此文

Oracle阻塞会话源头查找-单机和RAC环境

前言

  上篇文章《头发都白了,才知道若何实现多线程》小编用多线程方式实现了 边撸代码 边 看岛国大片 ,但却遗留了一个问题,run() 和 start()到底有什么区别?

回首Thread

回首Thread的API
public void start() :导致此线程最先执行; Java虚拟机挪用此线程的run方式。 
public void run() :此线程要执行的义务在此处界说代码。 

 

run() 和 start() 区别

区别:
1、挪用 start() 方式是用来启动线程的,轮到该线程执行时,会自动挪用 run()
2、直接挪用 run() 方式,无法到达启动多线程的目的,相当于主线程线性执行 Thread 工具的 run() 方式
3、一个线程对应的 start() 方式只能挪用一次,多次挪用会抛出 java.lang.IllegalThreadStateException 异常;run() 方式没有限制

看不懂没事,小编给你整个小总结
1、run()相当于线程的义务处置逻辑的入口方式
2、而start()的作用是启动响应的线程

测试start() 方式 上代码

public class TestThreadByStart {

    public static void main(String[] args) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000); //休眠3秒
                    System.out.println("休眠3秒");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread running:我照样早年谁人少年 ");
            }
        };
        testStart(thread);
    }

    private static void testStart(Thread thread) {
        thread.start(); //挪用 start()方式来启动线程,轮到该线程执行时,会自动挪用 run()
        try {
            Thread.sleep(1000); //休眠1秒
            System.out.println("休眠1秒");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

start() 方式 测试效果

线程的 run() 和 start() ; 太骚了 ~~

在这里插入图片形貌

测试run() 方式 上代码

public class TestThreadByRun {

    public static void main(String[] args) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000); //休眠3秒
                    System.out.println("休眠3秒");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread running:我照样早年谁人少年 ");
            }
        };
        testRun(thread);
    }

    private static void testRun(Thread thread) {
        thread.run(); //直接挪用 run() 方式,相当于主线程线性执行 Thread 工具的 run() 方式
        //休眠1秒
        try {
            Thread.sleep(1000);
            System.out.println("休眠1秒");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

run() 方式 测试效果

线程的 run() 和 start() ; 太骚了 ~~

在这里插入图片形貌

最后:

不足之处,还望小伙伴多多体谅;
有错之处,还望小伙伴指出,小编会尽快矫正

原创文章,作者:28rg新闻网,如若转载,请注明出处:https://www.28rg.com/archives/11942.html