摘要:第一個線程,從開始如果另一個線程等待,則喚醒對方之后,自己等待如果另一個線程等待,則喚醒對方之后,自己等待使用條件鎖最重要的是,自己等待之前,一定要喚醒其他線程,并且記住要釋放鎖。
public class testThread { public static void main(String[] args) { ReentrantLock lock=new ReentrantLock(); Condition one =lock.newCondition(); Condition two=lock.newCondition(); //第一個線程,從1開始 new Thread(new Runnable() { @Override public void run() { int i = 1; while (i<=20){ lock.lock(); System.out.print(" thread--1----:"+i); try { //如果另一個線程等待,則喚醒對方之后,自己等待 two.signalAll(); one.await(); i=i+2; } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } }).start(); new Thread(new Runnable() { @Override public void run() { int i = 2; while (i<=20){ lock.lock(); System.out.print(" thread--2----:"+i); try { //如果另一個線程等待,則喚醒對方之后,自己等待 one.signalAll(); two.await(); i=i+2; } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } }).start(); } }
使用條件鎖最重要的是,自己等待之前,一定要喚醒其他線程,并且記住finally要釋放鎖。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70952.html
摘要:通知任一一個進入等待狀態的線程,通知所有讓調用線程阻塞在這個方法上,直到的線程完全執行完畢,調用線程才會繼續執行。通知調度器,主動讓出對的占用。 多線程在開發知識中是一個很重要的部分,然而實際生產中卻很少遇到真正需要自己去處理多線程編程里的那些復雜細節和問題,因為很多時候,都有一套架構或者一些框架幫大部分業務程序員隱藏了多線程的細節,大多時候只需要簡單的實現各種業務邏輯即可。 今天來理...
摘要:大多數都是線程安全的,所以極大降低了在實現線程安全性的復雜性。只有在處理請求需要保存一些信息的情況下,線程安全性才會成為一個問題。雖然這種方式可以保證線程安全,但是性能方面會有些問題。 本文是作者在閱讀JCIP過程中的部分筆記和思考,純手敲,如有誤處,請指正,非常感謝~ 可能會有人對書中代碼示例中的注解有疑問,這里說一下,JCIP中示例代碼的注解都是自定義的,并非官方JDK的注解,因此...
閱讀 784·2021-09-26 09:55
閱讀 2072·2021-09-22 15:44
閱讀 1480·2019-08-30 15:54
閱讀 1337·2019-08-30 15:54
閱讀 2684·2019-08-29 16:57
閱讀 527·2019-08-29 16:26
閱讀 2497·2019-08-29 15:38
閱讀 2134·2019-08-26 11:48