Thread
使用 Java 的同学对 Thread 应该不陌生了,线程的创建和启动等这里就不讲了,这篇主要讲几个容易被忽视的方法,以及线程状态的迁移,最后会讲如何优雅的关闭线程。
wait/notify/notifyAll
首先我们要明白这三个方法是定义在 Object 类中,他们起到的作用就是允许线程就资源的锁定状态进行通信。这里所说的资源一般就是指的我们常说的共享对象了,也就是说针对共享对象的锁定状态可以通过 wait/notify/notifyAll 来进行通信。我们先看下如何使用的,并对相应原理进行展开。
wait
wait 方法告诉调用线程放弃锁定并进入休眠状态,直到其他某个线程进入同一个监视器(monitor)并调用 notify 方法。wait 方法在等待之前释放锁,并在 wait 方法返回之前重新获取锁。wait 方法实际上和同步锁紧密集成,补充同步机制无法直接实现的功能。需要注意到 wait 方法在 jdk 源码中是 final 并且是 native 的本地方法,我们无法去覆盖此方法。调用 wait 一般的方式如下:
synchronized(lockObject) {
while(!condition) {
lockObject.wait();
}
//…;
}
join