浅谈线程的方法和状态

Thread方法和状态:

插曲

说到了线程顺便说一下上学时候我搞不清的问题————线程和进程之间的关系

一个程序运行至少需要一个进程,而一个进程至少需要一个线程,所以线程–>进程–>程序。线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。

Thread的状态类型

1、新建状态(New):新创建了一个线程对象。

2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种: 
  a、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。 
  b、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。 
  c、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

Thread的几个重要方法

1、start(),调用该方法开始执行该线程

2、run(),调用该方法直接执行线程的run()方法,调用start()方法时也会执行该方法,不过这样是由线程调度执行run()方法。

3、stop(),调用该方法强制结束线程的执行。

4、join(),调用该方法等待线程执行结束。

5、sleep(),调用该方法线程进入等待。

顺带提一句以前被我搞混淆的wait()和notify(),这两个方法都是object的方法,而不是thread的方法。

wait()和sleep()的区别:最大的不同在于wait()会释放对象锁,而sleep()不会

原文地址:https://www.cnblogs.com/huangzhang/p/9213546.html