| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1879 人关注过本帖
标题:线程同步出错的
只看楼主 加入收藏
奋斗小冰
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2013-4-14
结帖率:50%
收藏
 问题点数:0 回复次数:0 
线程同步出错的
采用信号量和同步方法使得发送线程和接收线程同步运行
public class BufferLock {
private int value;
private boolean isEmpty=true;
public synchronized void put(int i)
{
    while(!isEmpty)
        try
    {
            this.wait();
    }
    catch(InterruptedException e){}
    value=i;
    isEmpty=false;
    notify();
}
public synchronized int get()
{
    while(isEmpty)
        try
    {
            this.wait();
    }
    catch(InterruptedException e){}
    isEmpty=true;
    notify();
    return value;
}
}

class Sender extends Thread
{
    private BufferLock buffer;
    public Sender(BufferLock buffer)
    {
        this.buffer=buffer;
    }
    public void run()
    {
        for(int i=1;i<6;i++)
        {
            buffer.put(i);
            System.out.println("Send put:"+i);
        }
    }
   
}

class Receiver extends Thread
{
    private BufferLock buffer;
    public Receiver(BufferLock buffer)
    {
        this.buffer=buffer;
        
    }
    public void run()
    {
        for(int i=1;i<6;i++)
        {
            System.out.println("\t\t\tReceiver get:"+buffer.get());
        }
    }
        public static void main(String args[])
        {
            BufferLock buffer=new BufferLock();
            (new Sender(buffer)).start();
            (new Receiver(buffer)).start();
        }
    }


但是最后运行的结果还是随机的,总是不能同步,到底是什么原因想不明白
ps:程序是书上的,用的是 eclipse[local]1[/local]
搜索更多相关主题的帖子: private public false 
2016-03-09 22:18
快速回复:线程同步出错的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018883 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved