Java多线程之间通信方式?1. wait(), notify(), notifyAll()若线程之间采用synchronized来保证线程安全,可以用这几个方法实现线程通信。这几个方法都是Object中声明的方法,而不是Thread类声明的。因为每个对象都有锁,所以让当前线程等待某个对象的锁,应该通过这个对象来操作(上锁或解锁)。另外这几个方法都是本地方法,且被final修饰。wait可以让当前线程释放锁,然后把线程放入阻塞队列中,进入阻塞状态。notify可以唤醒阻塞队列中的某个线程,使其进入就绪队列,以便在当前线程释放锁后进行竞争锁,进而得到cpu的执行。notifyAll和notify原理上差不多,只不过是唤醒阻塞队列中的全部线程参与竞争锁。2. await(), signal(), signalAll()如果线程采用Lock来保证线程安全,可以用这几个方式进行线程通信。这几个方法都是Condition接口的方法,在Java1.5中实现。其使用依赖于Lock,相比于第一种通信方式,这种更安全高效。await/signal/signalAll的使用必须要在Lock的保护之内,即在lock.lock() 和 lock.unlock()之间