JDK1.5的新特性--Lock

JDK1.5中提供了多線程的升級解決方法.

將同步synchronized替換成顯示Lock操作.

將Object中的wait,notify,notifyAll,替換了Condition對象中的await(),signal(),signalAll().

該對象可以通過Lock鎖的newCondition()方法進行獲取.(一個鎖可以對應多個Condition對象)

通過該對象,就可喚醒指定的線程.

如下是個小示例:

class Print2 {
private Lock lock =new ReentrantLock();
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();

private int flag = 1;


public void print1() throws Exception {
lock.lock();
if(flag!=1)
c1.await();
for (int i = 1; i <= 3; i++)
System.out.println("A: " + i);
System.out.println();
flag = 2;
c2.signal();
lock.unlock();
}


public  void print2() throws Exception {
lock.lock();
if (flag != 2)
c2.await();
for (int i = 1; i <= 3; i++)
System.out.println("B: " + i);
System.out.println();
flag = 3;
c3.signal();
lock.unlock();
}


public void print3() throws Exception {
lock.lock();
if (flag != 3)
c3.await();
for (int i = 1; i <= 3; i++)
System.out.println("C: " + i);
System.out.println();
flag = 1;
c1.signal();
lock.unlock();
}
}

發佈了35 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章