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(); } }; }