samples/privilegedcreator/src/api/Mutex.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:53:28 +0200
changeset 71 a9bd40166b60
permissions -rw-r--r--
Fixed "Give creator more rights"
jtulach@71
     1
/*
jtulach@71
     2
 * To change this template, choose Tools | Templates
jtulach@71
     3
 * and open the template in the editor.
jtulach@71
     4
 */
jtulach@71
     5
jtulach@71
     6
package api;
jtulach@71
     7
jtulach@71
     8
import java.util.concurrent.locks.Lock;
jtulach@71
     9
import java.util.concurrent.locks.ReentrantLock;
jtulach@71
    10
jtulach@71
    11
/**
jtulach@71
    12
 *
jtulach@71
    13
 * @author Jaroslav Tulach <jaroslav.tulach@netbeans.org>
jtulach@71
    14
 */
jtulach@71
    15
public class Mutex {
jtulach@71
    16
    Lock lock = new ReentrantLock();
jtulach@71
    17
    
jtulach@71
    18
    public Mutex() {
jtulach@71
    19
    }
jtulach@71
    20
jtulach@71
    21
    
jtulach@71
    22
    public void readAccess(Runnable r) {
jtulach@71
    23
        try {
jtulach@71
    24
            lock.lock();
jtulach@71
    25
            r.run();
jtulach@71
    26
        } finally {
jtulach@71
    27
            lock.unlock();
jtulach@71
    28
        }
jtulach@71
    29
    }
jtulach@71
    30
    
jtulach@71
    31
jtulach@71
    32
    
jtulach@71
    33
    public Mutex(Privileged privileged) {
jtulach@71
    34
        if (privileged.mutex != null) {
jtulach@71
    35
            throw new IllegalStateException();
jtulach@71
    36
        }
jtulach@71
    37
        privileged.mutex = this;
jtulach@71
    38
    }
jtulach@71
    39
    
jtulach@71
    40
    public static final class Privileged {
jtulach@71
    41
        private Mutex mutex;
jtulach@71
    42
        
jtulach@71
    43
        public void enterReadAccess() {
jtulach@71
    44
            mutex.lock.lock();
jtulach@71
    45
        }
jtulach@71
    46
        
jtulach@71
    47
        public void exitReadAccess() {
jtulach@71
    48
            mutex.lock.unlock();
jtulach@71
    49
        }
jtulach@71
    50
    }
jtulach@71
    51
}