zoukankan      html  css  js  c++  java
  • 线程交互-> 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、生产者和消费者问题(待续)

  • 相关阅读:
    __autoload函数
    错误处理try catch
    PHP面向对象基础实例
    类的继承关系实例
    YII重点文件
    //计算今年月度利息和
    cookie保存分页参数
    win64(win8)的python拓展包安装经验总结
    matcom安装时无法寻找到matlab.exe的解决办法
    《人人都是产品经理》阅读笔记一
  • 原文地址:https://www.cnblogs.com/wintersong/p/4752983.html
Copyright © 2011-2022 走看看