import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author kent 2013-3-11上午11:55:28
*/
public class PlayLock implements Runnable {
private Bean bean;
public PlayLock(Bean bean) {
super();
this.bean = bean;
}
public void run() {
for (int j = 0; j < 100; j++) {
bean.increment();
}
}
private static final class Bean {
private int i = 0;
private Lock lockObject = new ReentrantLock(); //如果是 new ReentrantLock(true)则代表锁是“公平”的,即先求锁者先得锁,避免“饿死”
public void increment() {
try {
lockObject.lock(); //加锁
doIncrement();
} finally {
lockObject.unlock(); //释放锁,要放在finally块里
}
}
private void doIncrement() {
int k = i;
k = k + 1;
doSleep();
i = k;
System.out.println(Thread.currentThread().getName() + ": i = " + i);
}
private void doSleep() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
public static void main(String[] args) {
Bean bean = new Bean();
Thread t1 = new Thread(new PlayLock(bean));
Thread t2 = new Thread(new PlayLock(bean));
t1.start();
t2.start();
}
}