import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
*
* @author daxin
*
*/
public class Main1 {
static Lock lock = new ReentrantLock();
public static void main(String[] args) throws Exception {
// TIMED_WAITING
// Thread.sleep(5000*5000);
// ----------------synchronized---------------------
// TIMED_WAITING
new Thread(target1, "1").start();
Thread.sleep(200);
// BLOCKED
new Thread(target1, "2").start();
// ----------------lock------------------
// TIMED_WAITING
new Thread(target2, "3").start();
Thread.sleep(200);
// WAITING
new Thread(target2, "4").start();
}
public static synchronized void get() {
try {
Thread.sleep(5000 * 5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
public static void get2() {
try {
lock.lock();
Thread.sleep(5000 * 5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
static Runnable target1 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
get();
}
};
static Runnable target2 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
get2();
}
};
}