首页 > 编程语言 > 详细

线程间通讯

时间:2015-12-27 17:44:25      阅读:233      评论:0      收藏:0      [点我收藏+]

同步的前提:
1.必须要有两个或者两个以上的线程
2.必须是多个线程使用同一个锁。

必须保证同步中只能有一个线程在运行

好处:解决了多线程的安全问题。
弊端:消耗了运算资源
死锁:同步中嵌套同步,而锁却不同。

线程间通讯:
其实就是多给线程在操作同一个资源,但是操作动作不同。
--------------------------------------------------------------------------------

class Res{
    String name;
    String sex;
}
class Input implements Runnable{
    private Res r;
    Object aa=new Object();
    Input(Res r){
        this.r=r;
    }
    public void run(){
        int x=0;
        while(true){
            synchronized(aa){ 
/*
(aa)这里是错误的,两个线程使用的不是同一个锁,要保证锁的唯一性
	1.去掉上面的 Object aa=new Object(); aa改为 类名.class ,因为建立一个类也是建立一个对象,而建立的类是唯一的,这样才算使用同一个锁。
	2.去掉上面的 Object aa=new Object(); aa改为 r ,r也是唯一的(理由看下面)
*/
                if(x==0){
                    r.name="丽丽";
                    r.sex="女";
                }else{
                    r.name="lisi";
                    r.sex="nan";
                }
                x=(x+1)%2;
            }
        }
    }
}
class Output implements Runnable{
    private Res r;
    Object aa=new Object();
    Output(Res r){
        this.r=r;
    }
    public void run(){
        while(true){
            synchronized(aa){
            	System.out.println(r.name+"...."+r.sex);
	    }
        }
    }
}
class Test{
    public static void main(String[] args){
        Res r=new Res();	//这里只有一个对象r,保证了唯一性.
        Input a=new Input(r);	//他们都使用了r这个对象,传进去了,保证了大家都有
        Output b=new Output(r); //他们都使用了r这个对象,传进去了,保证了大家都有
        Thread t1=new Thread(a);
        Thread t2=new Thread(b);
        t1.start();
        t2.start();
    }
}

  

线程间通讯

原文:http://www.cnblogs.com/s158/p/5080441.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!