Fork me on GitHub

一个线程间的通讯小程序__(Java_Thread_Inout.Output)

  1 //多线程通讯
  2 //多个线程处理同一资源,但是任务不同
  3 //等待唤醒方法:
  4 //wait():将线程变成为冻结状态,线程会被存储在线程池中;
  5 //notify():唤醒线程中的一个线程(任意的)
  6 //notifyAll():唤醒所有线程;
  7 /**************************************************************/
  8 //建立资源类
  9 class Resource
 10 {
 11     private boolean flag = false;
 12     private String name;
 13     private String sex;
 14     public synchronized void set(String name,String sex)
 15     {
 16         if(flag)
 17             try
 18             {
 19                 this.wait();
 20             }
 21             catch (InterruptedException e)
 22             {
 23             }
 24         this.name = name;
 25         this.sex = sex;
 26         this.flag=true;
 27         this.notify();    
 28     }
 29     public synchronized void get()
 30     {
 31         if(!this.flag)
 32             try
 33             {
 34                 this.wait();
 35             }
 36             catch (InterruptedException e)
 37             {
 38             }
 39         System.out.println(name+"--"+sex); 
 40         this.flag=false;
 41         this.notify();
 42     }
 43 }
 44 //建立输入任务类
 45 class Input implements Runnable
 46 {
 47     Resource r;
 48     Input(Resource r)
 49     {
 50         this.r = r;
 51     }
 52     public void run()
 53     {
 54         int x = 0;
 55         while(true)
 56         {
 57                     if (x==0)
 58                     {
 59                         r.set("野兽","男  ");
 60                     }
 61                     else
 62                     {
 63                         r.set("meinv","nv  ");
 64                     }
 65                     x=(x+1)%2;
 66         }
 67     }
 68 }
 69 //建立输出任务类
 70 class Output implements Runnable
 71 {
 72     Resource r;
 73     Output(Resource r)
 74     {
 75         this.r = r;
 76     }
 77             public void run()
 78             {
 79                 while(true)
 80                 {
 81                     synchronized(r)
 82                     {    
 83                             r.get();
 84                     }
 85                 }
 86     
 87              }
 88 }
 89 
 90 class  IoDemo1
 91 {
 92     public static void main(String[] args) 
 93     {
 94         //建立资源对象
 95         Resource r = new Resource();
 96           //建立输入任务对象
 97         Input in = new Input(r);
 98         //建立输出任务对象
 99         Output out = new Output(r);
100         //建立输入任务的进程
101         Thread t1 = new Thread(in);
102         //建立输出任务的进程
103         Thread t2 = new Thread(out);
104         //开启线程
105         t1.start();
106         t2.start();
107     }
108 }

 

posted @ 2016-04-14 08:32  gouermazi  阅读(224)  评论(0编辑  收藏  举报