A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 fanshuai 于 2015-1-24 10:30 编辑

分享一下代码

/*
线程间通讯。

需求:两个机制,一个存数据,一个取数据,交替进行。
数据是共享的。

本代码仅适合一存一取交替进行,需求一变还应该用等待唤醒机制和同步代码块(同步函数)。
代码未优化,凑合着看吧。;P


*/

class Ziyuan//资源唯一,用class封装
{
        String name;//资源的属性--名字
        String sex;//资源的属性--性别
        boolean flag=false;
}

class Input implements Runnable//存储数据
{
        Ziyuan zi;
        Input(Ziyuan zi)//构造函数,接收Ziyuan的对象
        {
                this.zi=zi;
        }
        public void run()//重写run方法
        {
                int x=0;
                while(true)
                {
                        if(!zi.flag)//用此语句锁住线程
                        {
                                if(x==0)
                                {
                                        zi.name="丽丽";
                                        zi.sex="女";
                                        x+=1;
                                }
                                else
                                {
                                        zi.name="Bob";
                                        zi.sex="man";
                                        x-=1;
                                }
                                zi.flag=true;//锁住本线程
                        }
                        
                }
        }
}

class Output implements Runnable//获取数据
{
        Ziyuan zi;
        Output(Ziyuan zi)//构造函数,接收Ziyuan的对象
        {
                this.zi=zi;
        }
        public void run()//重写run方法
        {
                while(true)
                {
                        if(zi.flag)//用此语句锁住线程
                        {        
                                System.out.println(zi.name+"...."+zi.sex+".......");
                                zi.flag=false;//锁住本线程
                        }
                }
        }
}

class InOutDemo
{
        public static void main(String[] args)
        {
                Ziyuan zi=new Ziyuan();//创建Ziyuan对象
               
                Input in=new Input(zi);//创建Input对象,并用zi参数进行构造函数初始化
                Output out=new Output(zi);//创建Output对象,并用zi参数进行构造函数初始化
               
                //创建两个线程
                Thread th1=new Thread(in);
                Thread th2=new Thread(out);
               
                th1.start();
                th2.start();
               
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

1 个回复

倒序浏览
帮顶 兄弟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马