//线程通信
//线程1 线程2 交替打印1——100
//wait()和notify()方法需要在一个监视器的同步代码块 中或者是同一个同步方法中// wait():线程从运行状态进入阻塞状态,并且释放锁
// notify():一旦执行此方法就会唤醒被wait的一个线程,如果多个线程被wait(),就唤醒优先级最高的
// notifyAll():唤醒所有被wait的线程
class Number implements Runnable{private int number = 1 ;@Overridepublic void run() {// TODO Auto-generated method stubwhile(true) {synchronized (this){this.notify(); //唤醒线程
// this.notifyAll() 唤醒所有线程if(number <= 100) {try {
// sleep()不会释放锁Thread.currentThread().sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+":"+number);number ++;}else break;try {
// 执行wait()线程从运行状态进入阻塞状态,并且释放锁this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
public class ThreadComunnication {public static void main(String[] args) {Number n = new Number();Thread t1 = new Thread(n);Thread t2 = new Thread(n);t1.setName("线程1");t2.setName("线程2");t1.start();t2.start(); }}