samples/deadlock/src/org/apidesign/deadlock/SynchronizedFieldsInternally.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:54:28 +0200
changeset 103 e492694451f6
permissions -rw-r--r--
Deadlocks on this and internal lock explained
     1 package org.apidesign.deadlock;
     2 
     3 public final class SynchronizedFieldsInternally {
     4     // BEGIN: deadlock.ownLock
     5     private final Object LOCK = new Object();
     6     private int counter;
     7     
     8     private int getCounter() {
     9         assert Thread.holdsLock(LOCK);
    10         return counter;
    11     } 
    12     
    13     private void setCounter(int c) {
    14         assert Thread.holdsLock(LOCK);
    15         counter = c;
    16     }
    17     // END: deadlock.ownLock
    18     
    19     
    20     public void increment() {
    21         synchronized (LOCK) {
    22             setCounter(getCounter() + 1);
    23         }
    24     }
    25     
    26     public void unsafeDecrement() {
    27         setCounter(getCounter() - 1);
    28     }
    29 }