Java Reference
In-Depth Information
20
// execute the Producer and Consumer tasks
21
executorService.execute(
new
Producer(sharedLocation));
executorService.execute(
new
Consumer(sharedLocation));
22
23
24
executorService.shutdown();
25
executorService.awaitTermination(
1
,
TimeUnit.MINUTES
);
26
}
27
}
// end class SharedBufferTest2
Operation Buffer Occupied
--------- ------ --------
Consumer tries to read.
Buffer empty. Consumer waits.
-1 false
Producer writes 1 1 true
Consumer reads 1 1 false
Consumer tries to read.
Buffer empty. Consumer waits.
1 false
Producer writes 2 2 true
Consumer reads 2 2 false
Producer writes 3 3 true
Consumer reads 3 3 false
Producer writes 4 4 true
Producer tries to write.
Buffer full. Producer waits.
4 true
Consumer reads 4 4 false
Producer writes 5 5 true
Consumer reads 5 5 false
Producer writes 6 6 true
Producer tries to write.
Buffer full. Producer waits.
6 true
Consumer reads 6 6 false
Producer writes 7 7 true
Producer tries to write.
Buffer full. Producer waits.
7 true
Consumer reads 7 7 false
Producer writes 8 8 true
Consumer reads 8 8 false
Consumer tries to read.
Buffer empty. Consumer waits.
8 false
Fig. 23.17
|
Two threads correctly manipulating a synchronized buffer. (Part 2 of 3.)