线程交互-> wait notify
1、涉及多线程共享数据操作时,除了同步问题之外,还会遇到另一类问题:如何控制相互交互的线程之间的交互进度。
举例来说:有两个人,一个在洗碗,一个在擦碗,洗碗的碗放到架子上,如果架子是空的,则擦碗的人进入等待状态,如果架子满了,则洗碗的人进入等待状态。
public class Test { public static void main(String[] args) { final f ff=new f(); new Thread(new Runnable() { @Override public void run() { while(true){ ff.f1(); } } },"A").start(); new Thread(new Runnable() { @Override public void run() { while(true){ ff.f2(); } } },"B").start(); } } class f{ boolean flag=false; public synchronized void f1() { while(flag==true){ try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()); flag=true; notifyAll(); } public synchronized void f2(){ while(!flag){ try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()); flag=false; notifyAll(); } }
确保了A和B的交替打印。
2、生产者和消费者问题(待续)