java多线程(2)---生命周期、线程通讯
java生命周期、线程通讯 一、生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别。 1、yield()方法 yield() 让当前正在运行的线程回到就绪 ,以允许 具有相同优先级 的其他线程获得运行的机会。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。 同时yield()不会放弃锁资源,所以有可能会出现死锁。 2、wait和sleep方法的区别 1)第一个很重要的区别就是, wait方法必须正在同步环境 下使用,比如synchronized方法或者同步代码块。如果你不在同步条件下使用,会抛出IllegalMonitorStateException异常。另外,sleep方法不需要再同步条件下调用,你可以任意正常的使用。 2)第二个区别是,wait方法用于和定义于 Object类 的,而sleep方法操作于当前线程,定义在java.lang. Thread类 里面。 3)第三个区别是,调用 wait()的时候方法会释放当前持有的锁 ,而sleep方法不会释放任何锁。 3、wait和sleep方法使用场景 (1)wait方法定义在Object类里面,所有对象都能用到, 一般wait()和notify()方法或notifyAll使用于线程间的通信 。 (2)sleep()方法用于暂停当前线程的执行。