# HG changeset patch # User Jaroslav Tulach # Date 1234338720 -3600 # Node ID e101649dbd175b9edfcda7af8a9ba302ef621685 # Parent 41a4abecb6008f97de7e4df3ae187ec97af87ee5 Marking code snippets for the "Java Monitor" wiki page diff -r 41a4abecb600 -r e101649dbd17 samples/deadlock/src/org/apidesign/javamonitorflaws/Cache.java --- a/samples/deadlock/src/org/apidesign/javamonitorflaws/Cache.java Wed Feb 11 07:12:41 2009 +0100 +++ b/samples/deadlock/src/org/apidesign/javamonitorflaws/Cache.java Wed Feb 11 08:52:00 2009 +0100 @@ -12,6 +12,7 @@ * * @author Jaroslav Tulach */ +// BEGIN: monitor.pitfalls.Cache public abstract class Cache { private Map cache; @@ -44,3 +45,4 @@ } } } +// END: monitor.pitfalls.Cache diff -r 41a4abecb600 -r e101649dbd17 samples/deadlock/test/org/apidesign/javamonitorflaws/CacheTest.java --- a/samples/deadlock/test/org/apidesign/javamonitorflaws/CacheTest.java Wed Feb 11 07:12:41 2009 +0100 +++ b/samples/deadlock/test/org/apidesign/javamonitorflaws/CacheTest.java Wed Feb 11 08:52:00 2009 +0100 @@ -98,25 +98,32 @@ org.apidesign.javamonitorflaws.CacheTest$2ToDeadlock.run:90 java.lang.Thread.run:619 */ + // BEGIN: monitor.pitfalls.block.propertychange public void testDeadlockViaAPI() throws Exception { if (Boolean.getBoolean("no.failures")) return; class ToDeadlock implements Runnable, PropertyChangeListener { + int lastMultiply; + public void run() { cache.setMultiply(10); } public void propertyChange(PropertyChangeEvent evt) { try { - Thread.sleep(500); + storeMultiply(); } catch (InterruptedException ex) { // ok } - assertMultiplyByTen(); } - public synchronized void assertMultiplyByTen() { - int value = cache.get("123"); - assertEquals("3*10=30", 30, value); + private synchronized void storeMultiply() + throws InterruptedException { + lastMultiply = cache.getMultiply(); + // simulates "starvation" + wait(); + } + + public void assertMultiplyByTen() { } } ToDeadlock toDeadlock = new ToDeadlock(); @@ -126,6 +133,10 @@ Thread.sleep(100); - toDeadlock.assertMultiplyByTen(); + // BEGIN: monitor.pitfalls.brokencall + int value = cache.get("123"); + assertEquals("3*10=30", 30, value); + // END: monitor.pitfalls.brokencall } + // END: monitor.pitfalls.block.propertychange } \ No newline at end of file diff -r 41a4abecb600 -r e101649dbd17 samples/deadlock/test/org/apidesign/javamonitorflaws/MultiplyCache.java --- a/samples/deadlock/test/org/apidesign/javamonitorflaws/MultiplyCache.java Wed Feb 11 07:12:41 2009 +0100 +++ b/samples/deadlock/test/org/apidesign/javamonitorflaws/MultiplyCache.java Wed Feb 11 08:52:00 2009 +0100 @@ -8,6 +8,7 @@ * * @author Jaroslav Tulach */ +// BEGIN: monitor.pitfalls.subclass public class MultiplyCache extends Cache { private PropertyChangeSupport pcs; private int multiply; @@ -38,6 +39,7 @@ protected Integer createItem(String f) { return f.length() * getMultiply(); } +} +// END: monitor.pitfalls.subclass -} \ No newline at end of file