码迷,mamicode.com
首页 > 编程语言 > 详细

java 中多线程之间的通讯之等待唤醒机制

时间:2015-06-27 19:48:02      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

wait

notify ()

nitifyAll ()

 

都使用在同步中,因为要对持有监视器(锁)的线程操作

所以要使用在同步中,因为只有同步才具有锁

 

为什么这些操作线程的方法要定义object类中呢

因为这些方法在操作同步中线程时。都必须要标识他们所操作线程只有的锁

只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒

不可以对不同锁中的线程进行唤醒

也就是说,等待和唤醒必须是同一个锁

而锁可以使任意对象,所以可以被任意对象调用的方法定义object类中 

 1 class Res
 2 {
 3     String name;
 4     String  sex;
 5     boolean flag = false;
 6 }
 7 
 8 class Input implements Runnable
 9 {
10     private Res r ;
11     Input (Res r){
12     this.r = r;
13     }
14     public void run (){
15         int x = 0;
16         while (true)
17         {
18             synchronized (r) {
19                 if (r.flag)
20                     try {r.wait();}catch(Exception e){}
21                     if (x==0){
22                         r.name = "java";
23                         r.sex = "man";
24                     }
25                     else
26                     {
27                         r.name = "杰克";
28                         r.sex = "女女vn";
29                         
30                     }
31                     x = (x+1)%2;
32                     r.flag = true;
33                     r.notify();
34                     
35                 }
36             }
37             
38         }            
39         
40     }
41     
42 
43 
44 class Output implements Runnable
45 {
46        private Res r;    
47        Output (Res r){
48            
49            this.r = r;
50        }
51        public void run (){
52            while (true){
53                synchronized(r){
54                    
55                    if (!r.flag)
56                        
57                        try {r.wait();}catch (Exception e){}
58                        System.out.println (r.name+"..."+r.sex);
59                        r.flag = false;
60                        r.notify();
61                        
62                    }
63                }
64                
65            }
66            
67        }
68 
69 public class InputOutputDemo {
70 
71     public static void main(String[] args) {
72         // TODO Auto-generated method stub
73         
74          System.out.println ("ddddd");
75         Res r = new Res ();
76         Input input = new Input (r);
77         Output output = new Output (r);
78         
79 
80         Thread t1 = new Thread (input);
81         Thread t2 = new Thread (output);
82         t1.start();
83         t2.start();
84     }
85 
86 }

 

java 中多线程之间的通讯之等待唤醒机制

标签:

原文地址:http://www.cnblogs.com/machao/p/4604439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!