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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2013-5-9 10:17  /  1549 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Back// 创建银行类
{
        String name;
        int NO;
}
class Input implements Runnable// 存钱
{
        private Back bk;// 声明银行类的引用
        Input(Back bk)//构造函数  这里的bk是主函数上传递过来的对象引用
    {
                this.bk = bk;
        }
        public void run()
        {
                int x = 0;// 用于做判断 当为0的时候存入美元 当为1的时候存入人民币
                int i = 100;
       
       
                while(i>0)
                {
                        synchronized (bk)// 这里的bk是两个线程共同持有的
                        {
              if (x == 0)
                                {
                    bk.name = "美元";
                    bk.NO = 1;
                                        System.out.println("存美元");
                }
                                else
                {
                                        bk.name = "renminbi";
                                        bk.NO = 2;
                                        System.out.println("存人民币");
                                }              
                                        i--;
                                        x = (x + 1) % 2;// 如果想让两个线程交替进行的话必须要进行判断 或者用单例设计模式也可以

                // 这里是用来做判断的
                        }
                }       


        }


}


class Output implements Runnable// 取钱
{
        private Back bk;
        Output(Back bk)
        {
                this.bk = bk;//同样的道理
        }
        public void run()
        {
                int i = 100;
               
                while (i > 0)
                {
                        synchronized (bk)
                        {
               System.out.println(bk.name + "......" + bk.NO);
                i--;
                        }

        }
               


    }

}



public class ThreadDemo3

{

    public static void main(String[] args)

    {

        Back bk = new Back();



        Input in = new Input(bk);

        Output out = new Output(bk);

        

        Thread t1 = new Thread(in);
               
                //这里的是和synchronized配套使用的 使用过的格式

        Thread t2 = new Thread(out);//将Runnable接口的子类对象作为Thread类的构造函数参数进行传递

        t1.start();
               

       t2.start();


  }
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1 以后点击工具栏上的“<>”插入代码,代码写.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马