# å¤çº¿ç¨æ¨¡å ç¥è¯ç¹çæå梳ç请åèè¿ç¯æç« :[javaå¤çº¿ç¨æ ¸å¿ææ¯æ¢³ç](http://blog.csdn.net/h3243212/article/details/51180173) ä¸é¢å¯¹è¯¥æ¨¡åçå 个å ä½è¯´æ: ## meet 该é¨åæ¯ä¸äºç®åçåºç¡ç¥è¯çå±ç¤º - [printMain.java](src/main/java/com/brianway/learning/java/multithread/meet/printMain.java):æå°å½å线ç¨åç§° - [Run.java](src/main/java/com/brianway/learning/java/multithread/meet/Run.java):é线ç¨å®å ¨çæ°æ®å ±äº« - [Run2_StartVsRun.java](src/main/java/com/brianway/learning/java/multithread/meet/Run2_StartVsRun.java):`run()` å `start()` çåºå« - [Run3_getName.java](src/main/java/com/brianway/learning/java/multithread/meet/Run3_getName.java):`this.getName()ï¼=Thread.currentThread().getName()`ï¼è¿æ¯ä¸¤ä¸ªæ¦å¿µ - [Run4_isAlive01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run4_isAlive01.java):`isAlive()` - [Run5_isAlive02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run5_isAlive02.java):`isAlive()` - [Run6_StartVsRun02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run6_StartVsRun02.java):`run()` 忥æ§è¡,`start()` 弿¥æ§è¡ - [Run7_interrupt01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run7_interrupt01.java):åæ¢çº¿ç¨ - [Run8_interrupted01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run8_interrupted01.java):å¤æçº¿ç¨æ¯å¦åæ¢ç¶æ,æµè¯å½åçº¿ç¨æ¯å¦å·²ç»ä¸æ - [Run9_interrupted02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run9_interrupted02.java):线ç¨çä¸æç¶æç± `interrupted()` æ¸ é¤ - [Run10_isInterrupted.java](src/main/java/com/brianway/learning/java/multithread/meet/Run10_isInterrupted.java):`isInterrupted()`ï¼ä¸æ¸ é¤ç¶ææ è®° - [Run11_sleepAndinterrupt01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run11_sleepAndinterrupt01.java):ç¡ç ä¸åæ¢ï¼å è¿å ¥ç `sleep()`,å `interrupt()` - [Run12_sleepAndinterrupt02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run12_sleepAndinterrupt02.java):å `interrupt()`,åè¿å ¥ `sleep()`,ç´æ¥è¿å¼å¸¸ - [Run13_suspendAndresume01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run13_suspendAndresume01.java):æå线ç¨,`suspend()` ä¸ `resume()` - [Run14_suspendAndresume02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run14_suspendAndresume02.java):`suspend()` ä¸ `resume()` ç缺ç¹ï¼ç¬å - [Run15_suspendAndresume03.java](src/main/java/com/brianway/learning/java/multithread/meet/Run15_suspendAndresume03.java):`suspend()` ç¬å éé®é¢,`println()` - [Run16_yield.java](src/main/java/com/brianway/learning/java/multithread/meet/Run16_yield.java):æµè¯ `yield()` - [Run17_priority01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run17_priority01.java):线ç¨ä¼å 级çç»§æ¿æ§ - [Run18_priority02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run18_priority02.java):ä¼å çº§å ·æè§åæ§ ## synchronize - [example1](src/main/java/com/brianway/learning/java/multithread/synchronize/example1) - [Run1_local.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example1/Run1_local.java):æ¹æ³å å±é¨åéåä¸åå¨âé线ç¨å®å ¨âé®é¢ - [example2](src/main/java/com/brianway/learning/java/multithread/synchronize/example2) - [Run2_private01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example2/Run2_private01.java):å®ä¾åéé线ç¨å®å ¨ - [Run2_twoObject.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example2/Run2_twoObject.java):å¤ä¸ªå¯¹è±¡å¤ä¸ªé - [example3](src/main/java/com/brianway/learning/java/multithread/synchronize/example3) - [Run3_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example3/Run3_synchronized01.java):`synchronized` æ¹æ³ä¸é对象 - [example4](src/main/java/com/brianway/learning/java/multithread/synchronize/example4) - [Run4_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example4/Run4_synchronized01.java):两个线ç¨è®¿é®åä¸ä¸ªå¯¹è±¡çä¸åæ¹æ³,çº¿ç¨ B å¯å¼æ¥è°ç¨é `synchronized` ç±»åæ¹æ³ - [example5](src/main/java/com/brianway/learning/java/multithread/synchronize/example5) - [Run5_lockRein.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example5/Run5_lockRein.java):`synchronized` ééå ¥ï¼æ¯æç»§æ¿ - [example6](src/main/java/com/brianway/learning/java/multithread/synchronize/example6) - [Run6_exception.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example6/Run6_exception.java):åºç°å¼å¸¸ï¼éèªå¨éæ¾ - [example7](src/main/java/com/brianway/learning/java/multithread/synchronize/example7) - [Run7_synNotExtends.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example7/Run7_synNotExtends.java):忥ä¸å ·ç»§æ¿æ§ - [example8](src/main/java/com/brianway/learning/java/multithread/synchronize/example8) - [Run8_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example8/Run8_synchronized01.java):`synchronized` æ¹æ³çå¼ç«¯ - [Run8_synchronized02.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example8/Run8_synchronized02.java):忥代ç åè§£å³åæ¥æ¹æ³çå¼ç«¯ - [example9](src/main/java/com/brianway/learning/java/multithread/synchronize/example9) - [Run9_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized01.java):å½å¤ä¸ªçº¿ç¨åæ¶æ§è¡`synchronized(x){}`忥代ç åæ¶åç°ææ - [Run9_synchronized01_twoObjects.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized01_twoObjects.java):ä¸åçâ对象çè§å¨â - [Run9_synchronized02.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized02.java):å½å ¶ä»çº¿ç¨æ§è¡ x å¯¹è±¡ä¸ `synchronized` åæ¥æ¹æ³æ¶ååæ¥ææ - [Run9_synchronized03.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized03.java):å½å ¶ä»çº¿ç¨æ§è¡ x 对象éé¢ç`synchronized(this)`代ç åæ¶ï¼ä¹åç°åæ¥ææ - [example10](src/main/java/com/brianway/learning/java/multithread/synchronize/example10) - [Run10_synBlockMoreObjectOneLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example10/Run10_synBlockMoreObjectOneLock.java):éªè¯åæ¥ `synchronized(class)` 代ç åçä½ç¨ - [Run10_synMoreObjectStaticOneLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example10/Run10_synMoreObjectStaticOneLock.java):Class éå¯ä»¥å¯¹ç±»çææå¯¹è±¡å®ä¾èµ·ä½ç¨ - [Run10_synTwoLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example10/Run10_synTwoLock.java):éªè¯ `synchronized` å ³é®åå è½½ `static` éææ¹æ³åå å°ééææ¹æ³ä¸æ¯åä¸ä¸ªé - [example11](src/main/java/com/brianway/learning/java/multithread/synchronize/example11) - [Run11_StringAndSyn.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example11/Run11_StringAndSyn.java):String ä½ä¸ºé对象,叏鿱 ->åä¸é - [Run11_StringAndSyn2.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example11/Run11_StringAndSyn2.java):ä¸ä½¿ç¨ String ä½ä¸ºé对象 - [example12](src/main/java/com/brianway/learning/java/multithread/synchronize/example12) - [Run12_deadLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example12/Run12_deadLock.java):æ»éæµè¯,jstackå½ä»¤ - [example13](src/main/java/com/brianway/learning/java/multithread/synchronize/example13) - [Run13_inner01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example13/Run13_inner01.java):å 置类å忥æµè¯1 - [Run13_inner02.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example13/Run13_inner02.java):å 置类ä¸åæ¥æµè¯2 - [example14](src/main/java/com/brianway/learning/java/multithread/synchronize/example14) - [Run14_setNewStringTwoLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example14/Run14_setNewStringTwoLock.java):é对象æ¹å - [example15](src/main/java/com/brianway/learning/java/multithread/synchronize/example15) - [Run15_synchronized.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example15/Run15_synchronized.java):`synchronized` 代ç åæ `volatile` 忥çåè½ - [Run15_volatile.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example15/Run15_volatile.java):ä¸ä½¿ç¨ `volatile` å ³é®å,JVM é ç½® `-server` - [example16](src/main/java/com/brianway/learning/java/multithread/synchronize/example16) - [Run16_volatile.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example16/Run16_volatile.java):`volatile` éååçç¹æ§ ## communication - [example1](src/main/java/com/brianway/learning/java/multithread/communication/example1) - [Run1_TwoThreadTransData.java](src/main/java/com/brianway/learning/java/multithread/communication/example1/Run1_TwoThreadTransData.java):ä¸ä½¿ç¨çå¾ /éç¥æºå¶å®ç°çº¿ç¨é´é - [example2](src/main/java/com/brianway/learning/java/multithread/communication/example2) - [Run2_noObjectLock.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_noObjectLock.java):没æâ对象çè§å¨âï¼è°ç¨ `wait()` æ¹æ³åºç°è¿è¡æ¶å¼å¸¸ - [Run2_notify.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_notify.java):`notify` å®ç°éç¥,`notify` è°ç¨åï¼å¹¶ä¸ä¼ç«å³éæ¾å¯¹è±¡éï¼èæ¯éåº `synchronized` 代ç åå - [Run2_sleep.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_sleep.java):æµè¯ `sleep()` æé´å ¶ä»çº¿ç¨æ¯å¦æ§è¡ - [Run2_wait.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_wait.java):`wait()` æ°¸è¿é»å¡ - [example3](src/main/java/com/brianway/learning/java/multithread/communication/example3) - [Run3_notifyAll.java](src/main/java/com/brianway/learning/java/multithread/communication/example3/Run3_notifyAll.java):å¤éå¤ä¸ªçº¿ç¨ - [Run3_notifyMany.java](src/main/java/com/brianway/learning/java/multithread/communication/example3/Run3_notifyMany.java):éç¥å¤ä¸ªçº¿ç¨ - [Run3_notifyOne.java](src/main/java/com/brianway/learning/java/multithread/communication/example3/Run3_notifyOne.java):éç¥ä¸ä¸ªçº¿ç¨ - [example4](src/main/java/com/brianway/learning/java/multithread/communication/example4) - [Run4_waitHasParam.java](src/main/java/com/brianway/learning/java/multithread/communication/example4/Run4_waitHasParam.java):`wait(long)` 使ç¨ï¼è¶ æ¶èªå¨å¤é - [Run4_waitHasParam2.java](src/main/java/com/brianway/learning/java/multithread/communication/example4/Run4_waitHasParam2.java):`wait(long)` 使ç¨ï¼æ¶é´éå¶å ç±å ¶ä»çº¿ç¨å¤é - [example5](src/main/java/com/brianway/learning/java/multithread/communication/example5) - [Run5_notify.java](src/main/java/com/brianway/learning/java/multithread/communication/example5/Run5_notify.java):`notify` æ£å¸¸éç¥ - [Run5_notifyEarly.java](src/main/java/com/brianway/learning/java/multithread/communication/example5/Run5_notifyEarly.java):`notify` éç¥è¿æ© - [example6](src/main/java/com/brianway/learning/java/multithread/communication/example6) - [Run6_waitOld.java](src/main/java/com/brianway/learning/java/multithread/communication/example6/Run6_waitOld.java):`wait` çå¾ æ¡ä»¶åå - [example7](src/main/java/com/brianway/learning/java/multithread/communication/example7) - [Run7_ProducerAndConsumer_One.java](src/main/java/com/brianway/learning/java/multithread/communication/example7/Run7_ProducerAndConsumer_One.java):ç产è /æ¶è´¹è 模å¼,ä¸çäº§ä¸æ¶è´¹ - [example8](src/main/java/com/brianway/learning/java/multithread/communication/example8) - [Run8_allWait.java](src/main/java/com/brianway/learning/java/multithread/communication/example8/Run8_allWait.java):å¤ç产ä¸å¤æ¶è´¹ï¼åæ» - [example9](src/main/java/com/brianway/learning/java/multithread/communication/example9) - [Run9_oneP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example9/Run9_oneP_manyC.java):ä¸ç产ä¸å¤æ¶è´¹ - [Run9_oneP_oneC.java](src/main/java/com/brianway/learning/java/multithread/communication/example9/Run9_oneP_oneC.java):ä¸ç产ä¸ä¸æ¶è´¹ - [example10](src/main/java/com/brianway/learning/java/multithread/communication/example10) - [Run10_oneP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example10/Run10_oneP_manyC.java):ä¸ç产ä¸å¤æ¶è´¹ - [example11](src/main/java/com/brianway/learning/java/multithread/communication/example11) - [Run11_manyP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example11/Run11_manyP_manyC.java):å¤ç产ä¸å¤æ¶è´¹ - [Run11_manyP_oneC.java](src/main/java/com/brianway/learning/java/multithread/communication/example11/Run11_manyP_oneC.java):å¤ç产ä¸ä¸æ¶è´¹ - [Run11_oneP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example11/Run11_oneP_manyC.java):ä¸ç产ä¸å¤æ¶è´¹ - [example12](src/main/java/com/brianway/learning/java/multithread/communication/example12) - [Run12_pipeInputOutput.java](src/main/java/com/brianway/learning/java/multithread/communication/example12/Run12_pipeInputOutput.java):éè¿ç®¡éè¿è¡çº¿ç¨é´éä¿¡ï¼åèæµ - [example13](src/main/java/com/brianway/learning/java/multithread/communication/example13) - [Run13_wait_notify_insert.java](src/main/java/com/brianway/learning/java/multithread/communication/example13/Run13_wait_notify_insert.java):çå¾ /éç¥ï¼äº¤åæ§è¡ - [example14](src/main/java/com/brianway/learning/java/multithread/communication/example14) - [Run14_join.java](src/main/java/com/brianway/learning/java/multithread/communication/example14/Run14_join.java):`join` ç¤ºä¾ - [Run14_joinExption.java](src/main/java/com/brianway/learning/java/multithread/communication/example14/Run14_joinExption.java):`join` çå¼å¸¸ - [Run14_joinLong.java](src/main/java/com/brianway/learning/java/multithread/communication/example14/Run14_joinLong.java):`join(long)` 设å®çå¾ çæ¶é´,`join(long)` å `sleep(long)` è¿è¡ææå¹¶æ åºå«ï¼ä½å¯¹åæ¥çå¤çä¸å - [example15](src/main/java/com/brianway/learning/java/multithread/communication/example15) - [Run15_join_sleep.java](src/main/java/com/brianway/learning/java/multithread/communication/example15/Run15_join_sleep.java):`join(long)` å `sleep(long)` çåºå«,`sleep(long)` æ¹æ³ä¸éæ¾é - [Run15_join_sleep_2.java](src/main/java/com/brianway/learning/java/multithread/communication/example15/Run15_join_sleep_2.java):`join(long)` å `sleep(long)` çåºå«,`join(long)` éæ¾é - [Run15_joinMore.java](src/main/java/com/brianway/learning/java/multithread/communication/example15/Run15_joinMore.java):æ¹æ³ `join` åé¢çä»£ç æåè¿è¡ - [example16](src/main/java/com/brianway/learning/java/multithread/communication/example16) - [Run16_InheritableThreadLocalExt.java](src/main/java/com/brianway/learning/java/multithread/communication/example16/Run16_InheritableThreadLocalExt.java):ç±» `InheritableThreadLocal` 使ç¨ï¼å¼ç»§æ¿ï¼å线ç¨ä»ç¶çº¿ç¨åå¾å¼ - [Run16_InheritableThreadLocalExt2.java](src/main/java/com/brianway/learning/java/multithread/communication/example16/Run16_InheritableThreadLocalExt2.java):ç±» `InheritableThreadLocal` 使ç¨ï¼å¼ç»§æ¿åæ´æ¹ - [Run16_ThreadLocal.java](src/main/java/com/brianway/learning/java/multithread/communication/example16/Run16_ThreadLocal.java):éªè¯çº¿ç¨åéçéç¦»æ§ ## lock - [example1](src/main/java/com/brianway/learning/java/multithread/lock/example1) - [Run1_UseConditionWaitNotify.java](src/main/java/com/brianway/learning/java/multithread/lock/example1/Run1_UseConditionWaitNotify.java):ä½¿ç¨ Condition å®ç°çå¾ éç¥,Condition 对象ç `await()`æ¹æ³ï¼çº¿ç¨`WAITING` - [Run1_UseConditionWaitNotifyError.java](src/main/java/com/brianway/learning/java/multithread/lock/example1/Run1_UseConditionWaitNotifyError.java):`IllegalMonitorStateException`ï¼çè§å¨åºé - [Run1_UseConditionWaitNotifyOk.java](src/main/java/com/brianway/learning/java/multithread/lock/example1/Run1_UseConditionWaitNotifyOk.java):æ£ç¡®ä½¿ç¨Conditionå®ç°çå¾ éç¥ - [example2](src/main/java/com/brianway/learning/java/multithread/lock/example2) - [Run2_MustUseMoreCondition.java](src/main/java/com/brianway/learning/java/multithread/lock/example2/Run2_MustUseMoreCondition.java):使ç¨å¤ä¸ª condition å®ç°éç¥é¨åçº¿ç¨ - [example3](src/main/java/com/brianway/learning/java/multithread/lock/example3) - [Run3_ConditionManyToMany.java](src/main/java/com/brianway/learning/java/multithread/lock/example3/Run3_ConditionManyToMany.java):å®ç°ç产è /æ¶è´¹è 模å¼ï¼å¤å¯¹å¤äº¤æ¿æå° - [example4](src/main/java/com/brianway/learning/java/multithread/lock/example4) - [Run4_Fair.java](src/main/java/com/brianway/learning/java/multithread/lock/example4/Run4_Fair.java):å ¬å¹³éæµè¯,æå°ç»æåæåºç¶æ - [Run4_notFair.java](src/main/java/com/brianway/learning/java/multithread/lock/example4/Run4_notFair.java):éå ¬å¹³éæµè¯,æå°ç»æä¹±åºï¼å å¯å¨ç线ç¨ä¸ä¸å®å è·å¾é - [example5](src/main/java/com/brianway/learning/java/multithread/lock/example5) - [Run5_getHoldCount.java](src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getHoldCount.java):æµè¯æ¹æ³ `int getHoldCount()` - [Run5_getQueueLength.java](src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getQueueLength.java):æµè¯æ¹æ³ `int getQueueLength()` - [Run5_getWaitQueueLength.java](src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getWaitQueueLength.java):æµè¯æ¹æ³ `int getWaitQueueLength(Condition condition)` - [example6](src/main/java/com/brianway/learning/java/multithread/lock/example6) - [Run6_hasQueueThread.java](src/main/java/com/brianway/learning/java/multithread/lock/example6/Run6_hasQueueThread.java):æµè¯æ¹æ³ `boolean hasQueueThread(Thread thread)` å `boolean hasQueueThreads()` - [Run6_hasWaiters.java](src/main/java/com/brianway/learning/java/multithread/lock/example6/Run6_hasWaiters.java):æµè¯æ¹æ³ `boolean hasWaiters(Condition)` - [example7](src/main/java/com/brianway/learning/java/multithread/lock/example7) - [Run7_isFair.java](src/main/java/com/brianway/learning/java/multithread/lock/example7/Run7_isFair.java):æµè¯æ¹æ³ `boolean isFair()` - [Run7_isHeldByCurrentThread.java](src/main/java/com/brianway/learning/java/multithread/lock/example7/Run7_isHeldByCurrentThread.java):æµè¯æ¹æ³ `boolean isHeldByCurrentThread()` - [Run7_isLocked.java](src/main/java/com/brianway/learning/java/multithread/lock/example7/Run7_isLocked.java):æµè¯æ¹æ³ `boolean isLocked()` - [example8](src/main/java/com/brianway/learning/java/multithread/lock/example8) - [Run8_lockInterruptibly1.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_lockInterruptibly1.java):æµè¯æ¹æ³ `void lockInterruptibly()` - [Run8_lockInterruptibly2.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_lockInterruptibly2.java):æµè¯æ¹æ³ `void lockInterruptibly()` - [Run8_tryLock.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_tryLock.java):æµè¯æ¹æ³ `boolean tryLock()` - [Run8_tryLock_param.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_tryLock_param.java):æµè¯æ¹æ³ `boolean tryLock(long timeout,TimeUnit unit)` - [example9](src/main/java/com/brianway/learning/java/multithread/lock/example9) - [Run9_awaitUniterruptibly1.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUniterruptibly1.java):æµè¯æ¹æ³ `awaitUniterruptibly()` - [Run9_awaitUniterruptibly2.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUniterruptibly2.java):æµè¯æ¹æ³ `awaitUniterruptibly()` - [Run9_awaitUntil1.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUntil1.java):æµè¯æ¹æ³ `awaitUntil()` - [Run9_awaitUntil2.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUntil2.java):æµè¯æ¹æ³ `awaitUntil()` - [example10](src/main/java/com/brianway/learning/java/multithread/lock/example10) - [Run10_condition.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_condition.java):Condition å®ç°é¡ºåºæå° - [Run10_ReadWriteLockBegin1.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_ReadWriteLockBegin1.java):ç±» `ReentrantReadWriteLock` ç使ç¨ï¼è¯»è¯»å ±äº« - [Run10_ReadWriteLockBegin2.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_ReadWriteLockBegin2.java):ç±» `ReentrantReadWriteLock` ç使ç¨ï¼ååäºæ¥ - [Run10_ReadWriteLockBegin3.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_ReadWriteLockBegin3.java):ç±» `ReentrantReadWriteLock` ç使ç¨ï¼è¯»åäºæ¥ ## timer - [example1](src/main/java/com/brianway/learning/java/multithread/timer/example1):`schedule(TimerTask task, Date time)` æµè¯ - [Run1_timer1.java](src/main/java/com/brianway/learning/java/multithread/timer/example1/Run1_timer1.java):卿ªæ¥æ§è¡çææ,Timer çæé æ¹æ³ä¼æ°å¯ä¸ä¸ªçº¿ç¨ï¼ä¸é宿¤çº¿ç¨ - [Run1_timer2.java](src/main/java/com/brianway/learning/java/multithread/timer/example1/Run1_timer2.java):卿ªæ¥æ§è¡çææ,Timer çæé æ¹æ³ä¼æ°å¯ä¸ä¸ªå®æ¤çº¿ç¨,è¿ éç»æï¼task任塿ªè¢«æ§è¡ - [Run1_timer3.java](src/main/java/com/brianway/learning/java/multithread/timer/example1/Run1_timer3.java):æåè¿è¡çææ - [Run1_timer4.java](src/main/java/com/brianway/learning/java/multithread/timer/example1/Run1_timer4.java):å¤ä¸ª TimerTask ä»»å¡åå»¶æ¶ - [Run1_timer5.java](src/main/java/com/brianway/learning/java/multithread/timer/example1/Run1_timer5.java):å¤ä¸ªTimerTaskä»»å¡åå»¶æ¶,éåçæ¹å¼ï¼ä¸ä¸ªä¸ä¸ªè¢«é¡ºåºæ§è¡ï¼åé¢ä¸ä¸ªèæ¶é¿ååé¢çä»»å¡è¢«å»¶å - [example2](src/main/java/com/brianway/learning/java/multithread/timer/example2):`schedule(TimerTask task, long delay, long period)` æµè¯ - [Run2_period1.java](src/main/java/com/brianway/learning/java/multithread/timer/example2/Run2_period1.java):卿ªæ¥æ§è¡çææ - [Run2_period2.java](src/main/java/com/brianway/learning/java/multithread/timer/example2/Run2_period2.java):æåè¿è¡çææ - [Run2_period3.java](src/main/java/com/brianway/learning/java/multithread/timer/example2/Run2_period3.java):任塿§è¡æ¶é´è¢«å»¶æ¶ - [example3](src/main/java/com/brianway/learning/java/multithread/timer/example3) - [Run3_cancel1.java](src/main/java/com/brianway/learning/java/multithread/timer/example3/Run3_cancel1.java):`TimerTask` ç±»ç `cancel()` æ¹æ³,å°èªèº«ä»ä»»å¡éåç§»é¤ï¼å ¶ä»ä»»å¡ä¸åå½±å - [Run3_cancel2.java](src/main/java/com/brianway/learning/java/multithread/timer/example3/Run3_cancel2.java):`Timer` ç±»ç `cancel()`æ¹æ³,å ¨é¨ä»»å¡è¢«æ¸ é¤ï¼ä¸è¿ç¨è¢«éæ¯ - [Run3_cancel3.java](src/main/java/com/brianway/learning/java/multithread/timer/example3/Run3_cancel3.java):`Timer` ç±»ç `cancel()`æ¹æ³,ææ¶ä¸ä¸å®ä¼åæ¢è®¡åä»»å¡ - [example4](src/main/java/com/brianway/learning/java/multithread/timer/example4) - [Run4_schedule1.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule1.java):`schedule(TimerTask task, long delay)` æ¹æ³ - [Run4_schedule2.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule2.java):`schedule(TimerTask task, long delay, long period)` æ¹æ³ - [Run4_schedule3.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule3.java):`schedule(TimerTask task, Date firstTime, long period)` æ¹æ³ - [Run4_schedule4.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule4.java):`schedule(TimerTask task, long delay, long period)` æ¹æ³ - [Run4_schedule5.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule5.java):`schedule(TimerTask task, Date firstTime, long period)` æ¹æ³ - [Run4_schedule6.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule6.java):`schedule(TimerTask task, long delay, long period)` æ¹æ³ - [Run4_schedule_vs_scheduleAtFixedRate_1.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule_vs_scheduleAtFixedRate_1.java):schedule ä¸å ·æè¿½èµ¶æ§è¡æ§ - [Run4_schedule_vs_scheduleAtFixedRate_2.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_schedule_vs_scheduleAtFixedRate_2.java):scheduleAtFixedRate å ·æè¿½èµ¶æ§è¡æ§ - [Run4_scheduleAtFixedRate1.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_scheduleAtFixedRate1.java):`scheduleAtFixedRate(TimerTask task, Date firstTime,long period)` æ¹æ³ - [Run4_scheduleAtFixedRate2.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_scheduleAtFixedRate2.java):`scheduleAtFixedRate(TimerTask task, long delay, long period)` æ¹æ³ - [Run4_scheduleAtFixedRate3.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_scheduleAtFixedRate3.java):`scheduleAtFixedRate(TimerTask task, Date firstTime, long period)` æ¹æ³ - [Run4_scheduleAtFixedRate4.java](src/main/java/com/brianway/learning/java/multithread/timer/example4/Run4_scheduleAtFixedRate4.java):`scheduleAtFixedRate(TimerTask task, long delay, long period)` æ¹æ³ ## singleton - [example1](src/main/java/com/brianway/learning/java/multithread/singleton/example1) - [Run1_singleton0.java](src/main/java/com/brianway/learning/java/multithread/singleton/example1/Run1_singleton0.java):ç«å³å è½½/âé¥¿æ±æ¨¡å¼â - [Run1_singleton1.java](src/main/java/com/brianway/learning/java/multithread/singleton/example1/Run1_singleton1.java):å»¶è¿å è½½/âææ±æ¨¡å¼â(ä¼åºé®é¢) - [Run1_singleton2.java](src/main/java/com/brianway/learning/java/multithread/singleton/example1/Run1_singleton2.java):å»¶è¿å è½½/âææ±æ¨¡å¼â缺ç¹å±ç¤º - [example2](src/main/java/com/brianway/learning/java/multithread/singleton/example2):å»¶è¿å è½½/âææ±æ¨¡å¼âè§£å³æ¹æ¡ - [Run2_singleton1.java](src/main/java/com/brianway/learning/java/multithread/singleton/example2/Run2_singleton1.java):声æ `synchronized` å ³é®åï¼æ´ä¸ªæ¹æ³ä¸é - [Run2_singleton2.java](src/main/java/com/brianway/learning/java/multithread/singleton/example2/Run2_singleton2.java):声æ `synchronized` å ³é®åï¼åæ¥ä»£ç å - [Run2_singleton3.java](src/main/java/com/brianway/learning/java/multithread/singleton/example2/Run2_singleton3.java):声æ `synchronized` å ³é®åï¼é¨å代ç ä¸é - [Run2_singleton4.java](src/main/java/com/brianway/learning/java/multithread/singleton/example2/Run2_singleton4.java):DCL 忣æ¥éæºå¶ - [example3](src/main/java/com/brianway/learning/java/multithread/singleton/example3) - [Run3_singleton1.java](src/main/java/com/brianway/learning/java/multithread/singleton/example3/Run3_singleton1.java):使ç¨éæå 置类å®ç°å便¨¡å¼ - [Run3_singleton2.java](src/main/java/com/brianway/learning/java/multithread/singleton/example3/Run3_singleton2.java):åºååä¸ååºååçå便¨¡å¼å®ç° - [Run3_singleton3.java](src/main/java/com/brianway/learning/java/multithread/singleton/example3/Run3_singleton3.java):ä½¿ç¨ `static` 代ç åå®ç°å便¨¡å¼ - [Run3_singleton4.java](src/main/java/com/brianway/learning/java/multithread/singleton/example3/Run3_singleton4.java):ä½¿ç¨ `enum` æä¸¾æ°æ®ç±»åå®ç°å便¨¡å¼ - [Run3_singleton5.java](src/main/java/com/brianway/learning/java/multithread/singleton/example3/Run3_singleton5.java):ä½¿ç¨ `enum` æä¸¾æ°æ®ç±»åå®ç°å便¨¡å¼ ## supplement - [example1](src/main/java/com/brianway/learning/java/multithread/supplement/example1) - [Run1_state1.java](src/main/java/com/brianway/learning/java/multithread/supplement/example1/Run1_state1.java):éªè¯ `NEW,RUNNABLE`,`TERMINATED` - [Run1_state2.java](src/main/java/com/brianway/learning/java/multithread/supplement/example1/Run1_state2.java):éªè¯ `TIMED_WAITING` - [Run1_state3.java](src/main/java/com/brianway/learning/java/multithread/supplement/example1/Run1_state3.java):éªè¯ `BLOCKED` - [example2](src/main/java/com/brianway/learning/java/multithread/supplement/example2) - [Run2_autoAddGroup.java](src/main/java/com/brianway/learning/java/multithread/supplement/example2/Run2_autoAddGroup.java):线ç¨ç»èªå¨å½å±ç¹æ§ - [Run2_getGroupParent.java](src/main/java/com/brianway/learning/java/multithread/supplement/example2/Run2_getGroupParent.java):è·åæ ¹çº¿ç¨ç»,JVM æ ¹çº¿ç¨ç»å°±æ¯ system - [Run2_groupAddThread.java](src/main/java/com/brianway/learning/java/multithread/supplement/example2/Run2_groupAddThread.java)线ç¨å¯¹è±¡å ³è线ç¨ç»ï¼ä¸çº§å ³è - [Run2_groupAddThreadMoreLevel.java](src/main/java/com/brianway/learning/java/multithread/supplement/example2/Run2_groupAddThreadMoreLevel.java):线ç¨å¯¹è±¡å ³è线ç¨ç»,å¤çº§å ³è - [Run2_threadRunSyn.java](src/main/java/com/brianway/learning/java/multithread/supplement/example2/Run2_threadRunSyn.java):使线ç¨å ·ææåºæ§ - [example3](src/main/java/com/brianway/learning/java/multithread/supplement/example3) - [Run3_formatError.java](src/main/java/com/brianway/learning/java/multithread/supplement/example3/Run3_formatError.java):`SimpleDateFormat` ç±»é线ç¨å®å ¨ - [Run3_formatOK1.java](src/main/java/com/brianway/learning/java/multithread/supplement/example3/Run3_formatOK1.java):`SimpleDateFormat` ç±»é线ç¨å®å ¨ï¼è§£å³å¼å¸¸æ¹æ³ä¸ - [Run3_formatOK2.java](src/main/java/com/brianway/learning/java/multithread/supplement/example3/Run3_formatOK2.java):`SimpleDateFormat` ç±»é线ç¨å®å ¨ï¼è§£å³å¼å¸¸æ¹æ³äº - [example4](src/main/java/com/brianway/learning/java/multithread/supplement/example4) - [Run4_threadCreateException.java](src/main/java/com/brianway/learning/java/multithread/supplement/example4/Run4_threadCreateException.java):线ç¨ä¸åºç°å¼å¸¸ - [Run4_threadCreateException2.java](src/main/java/com/brianway/learning/java/multithread/supplement/example4/Run4_threadCreateException2.java):线ç¨ä¸åºç°å¼å¸¸ï¼ææ - [Run4_threadCreateException3.java](src/main/java/com/brianway/learning/java/multithread/supplement/example4/Run4_threadCreateException3.java):线ç¨ä¸åºç°å¼å¸¸ï¼ææ - [example5](src/main/java/com/brianway/learning/java/multithread/supplement/example5) - [Run5_threadGroup1.java](src/main/java/com/brianway/learning/java/multithread/supplement/example5/Run5_threadGroup1.java):线ç¨ç»å å¤çå¼å¸¸ - [Run5_threadGroup2.java](src/main/java/com/brianway/learning/java/multithread/supplement/example5/Run5_threadGroup2.java):线ç¨ç»å å¤çå¼å¸¸ - [example6](src/main/java/com/brianway/learning/java/multithread/supplement/example6) - [Run6_threadExceptionMove1.java](src/main/java/com/brianway/learning/java/multithread/supplement/example6/Run6_threadExceptionMove1.java) - [Run6_threadExceptionMove2.java](src/main/java/com/brianway/learning/java/multithread/supplement/example6/Run6_threadExceptionMove2.java)