Java多线程-线程通信
线程通信三个方法
* wait();//一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
* notify();//一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就会唤醒优先级较高的
* notifyAll();//一旦执行此方法,就会唤醒被wait的所有线程
*
* 注意
* 1.wait\notify\notifyAll只能出现在同步代码块或者同步方法中
* 2.wait\notify\notifyAll的调用者必须是同步代码块或同步方法中的同步监视器
/** * * 线程通信的例子,使两个线程打印1-100,线程1,线程2交替打印 * 线程通信三个方法 * wait();//一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器 * notify();//一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就会唤醒优先级较高的 * notifyAll();//一旦执行此方法,就会唤醒被wait的所有线程 * * 注意 * 1.wait\notify\notifyAll只能出现在同步代码块或者同步方法中 * 2.wait\notify\notifyAll的调用者必须是同步代码块或同步方法中的同步监视器 * * * * @author orz */ public class CommunicationTest { public static void main(String[] args) { Number number = new Number(); Thread t1=new Thread(number); Thread t2=new Thread(number); t1.setName("线程一"); t2.setName("线程二"); t1.start(); t2.start(); } } class Number implements Runnable { private int number=1; @Override public void run() { while (true) { synchronized (this) { //唤醒一个线程 notify(); if (number<=100) { System.out.println(Thread.currentThread().getName()+":"+number); number++; try { //使得线程进入阻塞状态,释放锁 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } } }