线程生命周期、重要知识点

当我们通过Thread  t1 = new Thread()创建一个线程的时候,其实这个时候t1不能代表一个线程(通过JConsole看不到这个线程),调用start()方法后,才会是一个真正的线程(通过JConsole可以看到这个线程)。

New表示创建一个线程

Start表示开启线程

Runnable表示处于就绪状态,随时可以开始执行

Running表示被分配到了CPU执行权后就具备了执行的能力,但是Running过程中可能会因为sleep/wait/争抢锁而被阻塞,从而处于Blocked(阻塞)状态。注意Blocked之后不可以直接回到Running状态,而是返回到Runnable状态。

Terminated表示终结,执行完后终止,也可能在运行时出现异常而终止,也可能在阻塞的时候被打断终止,也可能在就绪状态的时候出现意外情况而终止

生命周期图:

总结知识点:

1.Java应用程序的main函数是一个名字为main的线程,是被JVM启动的时候调用。

2.Thread本身也实现了Runnable

3.通过创建Thread类的实例来创建线程。通过调用start方法开启线程。通过重写run方法来 写自己的业务逻辑。因为start()方法中通过start0()方法(start0()是native的方法)调用了run()方法。

4.当调用线程start()方法的时候,此时至少有两个线程,一个是调用你的线程,另一个是start的线程。

5.创建线程(new Thread()),默认有个线程名,以Thread-开头,从0开始计数,例如Thread-0/ Thread-1

6.如果在构造Thread的时候,没有传递Runnable的实例或没有复写run()方法,则Thread不会调用任何东西。若传递Runnable的实例或复写run()方法,则Thread不会执行run()方法的逻辑代码。

7.如果构造线程对象时,构造函数中未传入ThreadGroup,则Thread会默认获取父线程的ThreadGroup作为该线程的ThreadGroup。

8.构造Thread时,传入stacksize代表这该线程占用的stack大小,若没传入stacksize默认是0,0代表着忽略该参数。这个参数会在本地方法(start0)中使用。需要注意的是该参数在有些平台有效,有些平台无效。

 

啦啦啦~~~~~~又是开心的一天♪(^∀^●)ノ

猜你喜欢

转载自blog.csdn.net/Peacock__/article/details/89446889