KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > oldclassic


1 //
2
// Copyright (C) 2005 United States Government as represented by the
3
// Administrator of the National Aeronautics and Space Administration
4
// (NASA). All Rights Reserved.
5
//
6
// This software is distributed under the NASA Open Source Agreement
7
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
8
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
9
// directory tree for the complete NOSA document.
10
//
11
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
12
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
13
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
14
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
15
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
16
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
17
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
18
//
19

20 /**
21  * This example shows a deadlock which occurs as a result of a missed signals.
22  * @author wvisser
23  */

24 public class oldclassic {
25   public static void main (String JavaDoc[] args) {
26     Event new_event1 = new Event();
27     Event new_event2 = new Event();
28
29     FirstTask task1 = new FirstTask(new_event1, new_event2);
30     SecondTask task2 = new SecondTask(new_event1, new_event2);
31
32     task1.start();
33     task2.start();
34   }
35 }
36
37 /**
38  * DOCUMENT ME!
39  */

40 class Event {
41   int count = 0;
42
43   public synchronized void signal_event () {
44     count = (count + 1) % 3;
45     notifyAll();
46   }
47
48   public synchronized void wait_for_event () {
49     try {
50       wait();
51     } catch (InterruptedException JavaDoc e) {
52     }
53
54     ;
55   }
56 }
57
58 /**
59  * DOCUMENT ME!
60  */

61 class FirstTask extends java.lang.Thread JavaDoc {
62   Event event1;
63   Event event2;
64   int count = 0;
65
66   public FirstTask (Event e1, Event e2) {
67     this.event1 = e1;
68     this.event2 = e2;
69   }
70
71   public void run () {
72     count = event1.count;
73
74     while (true) {
75       System.out.println("1");
76
77       if (count == event1.count) {
78         event1.wait_for_event();
79       }
80
81       count = event1.count;
82       event2.signal_event();
83     }
84   }
85 }
86
87 /**
88  * DOCUMENT ME!
89  */

90 class SecondTask extends java.lang.Thread JavaDoc {
91   Event event1;
92   Event event2;
93   int count = 0;
94
95   public SecondTask (Event e1, Event e2) {
96     this.event1 = e1;
97     this.event2 = e2;
98   }
99
100   public void run () {
101     count = event2.count;
102
103     while (true) {
104       System.out.println("2");
105       event1.signal_event();
106
107       if (count == event2.count) {
108         event2.wait_for_event();
109       }
110
111       count = event2.count;
112     }
113   }
114 }
Popular Tags