Skip to content

Commit d326338

Browse files
committed
[update] update README of mutithread,add communication and lock TOC
1 parent 5a757be commit d326338

File tree

7 files changed

+102
-8
lines changed

7 files changed

+102
-8
lines changed

java-multithread/README.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,97 @@
7272
- [Run15_volatile.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example15/Run15_volatile.java):不使用 `volatile` 关键字,JVM 配置 `-server`
7373
- [example16](src/main/java/com/brianway/learning/java/multithread/synchronize/example16)
7474
- [Run16_volatile.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example16/Run16_volatile.java):`volatile` 非原子的特性
75+
76+
77+
78+
## communication
79+
80+
- [example1](src/main/java/com/brianway/learning/java/multithread/communication/example1)
81+
- [Run1_TwoThreadTransData.java](src/main/java/com/brianway/learning/java/multithread/communication/example1/Run1_TwoThreadTransData.java):不使用等待/通知机制实现线程间通
82+
- [example2](src/main/java/com/brianway/learning/java/multithread/communication/example2)
83+
- [Run2_noObjectLock.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_noObjectLock.java):没有“对象监视器”,调用 `wait()` 方法出现运行时异常
84+
- [Run2_notify.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_notify.java):`notify` 实现通知,`notify` 调用后,并不会立即释放对象锁,而是退出 `synchronized` 代码块后
85+
- [Run2_sleep.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_sleep.java):测试 `sleep()` 期间其他线程是否执行
86+
- [Run2_wait.java](src/main/java/com/brianway/learning/java/multithread/communication/example2/Run2_wait.java):`wait()` 永远阻塞
87+
- [example3](src/main/java/com/brianway/learning/java/multithread/communication/example3)
88+
- [Run3_notifyAll.java](src/main/java/com/brianway/learning/java/multithread/communication/example3/Run3_notifyAll.java):唤醒多个线程
89+
- [Run3_notifyMany.java](src/main/java/com/brianway/learning/java/multithread/communication/example3/Run3_notifyMany.java):通知多个线程
90+
- [Run3_notifyOne.java](src/main/java/com/brianway/learning/java/multithread/communication/example3/Run3_notifyOne.java):通知一个线程
91+
- [example4](src/main/java/com/brianway/learning/java/multithread/communication/example4)
92+
- [Run4_waitHasParam.java](src/main/java/com/brianway/learning/java/multithread/communication/example4/Run4_waitHasParam.java):`wait(long)` 使用,超时自动唤醒
93+
- [Run4_waitHasParam2.java](src/main/java/com/brianway/learning/java/multithread/communication/example4/Run4_waitHasParam2.java):`wait(long)` 使用,时间限制内由其他线程唤醒
94+
- [example5](src/main/java/com/brianway/learning/java/multithread/communication/example5)
95+
- [Run5_notify.java](src/main/java/com/brianway/learning/java/multithread/communication/example5/Run5_notify.java):`notify` 正常通知
96+
- [Run5_notifyEarly.java](src/main/java/com/brianway/learning/java/multithread/communication/example5/Run5_notifyEarly.java):`notify` 通知过早
97+
- [example6](src/main/java/com/brianway/learning/java/multithread/communication/example6)
98+
- [Run6_waitOld.java](src/main/java/com/brianway/learning/java/multithread/communication/example6/Run6_waitOld.java):`wait` 等待条件变化
99+
- [example7](src/main/java/com/brianway/learning/java/multithread/communication/example7)
100+
- [Run7_ProducerAndConsumer_One.java](src/main/java/com/brianway/learning/java/multithread/communication/example7/Run7_ProducerAndConsumer_One.java):生产者/消费者模式,一生产一消费
101+
- [example8](src/main/java/com/brianway/learning/java/multithread/communication/example8)
102+
- [Run8_allWait.java](src/main/java/com/brianway/learning/java/multithread/communication/example8/Run8_allWait.java):多生产与多消费,假死
103+
- [example9](src/main/java/com/brianway/learning/java/multithread/communication/example9)
104+
- [Run9_oneP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example9/Run9_oneP_manyC.java):一生产与多消费
105+
- [Run9_oneP_oneC.java](src/main/java/com/brianway/learning/java/multithread/communication/example9/Run9_oneP_oneC.java):一生产与一消费
106+
- [example10](src/main/java/com/brianway/learning/java/multithread/communication/example10)
107+
- [Run10_oneP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example10/Run10_oneP_manyC.java):一生产与多消费
108+
- [example11](src/main/java/com/brianway/learning/java/multithread/communication/example11)
109+
- [Run11_manyP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example11/Run11_manyP_manyC.java):多生产与多消费
110+
- [Run11_manyP_oneC.java](src/main/java/com/brianway/learning/java/multithread/communication/example11/Run11_manyP_oneC.java):多生产与一消费
111+
- [Run11_oneP_manyC.java](src/main/java/com/brianway/learning/java/multithread/communication/example11/Run11_oneP_manyC.java):一生产与多消费
112+
- [example12](src/main/java/com/brianway/learning/java/multithread/communication/example12)
113+
- [Run12_pipeInputOutput.java](src/main/java/com/brianway/learning/java/multithread/communication/example12/Run12_pipeInputOutput.java):通过管道进行线程间通信:字节流
114+
- [example13](src/main/java/com/brianway/learning/java/multithread/communication/example13)
115+
- [Run13_wait_notify_insert.java](src/main/java/com/brianway/learning/java/multithread/communication/example13/Run13_wait_notify_insert.java):等待/通知,交叉执行
116+
- [example14](src/main/java/com/brianway/learning/java/multithread/communication/example14)
117+
- [Run14_join.java](src/main/java/com/brianway/learning/java/multithread/communication/example14/Run14_join.java):`join` 示例
118+
- [Run14_joinExption.java](src/main/java/com/brianway/learning/java/multithread/communication/example14/Run14_joinExption.java):`join` 的异常
119+
- [Run14_joinLong.java](src/main/java/com/brianway/learning/java/multithread/communication/example14/Run14_joinLong.java):`join(long)` 设定等待的时间,`join(long)``sleep(long)` 运行效果并无区别,但对同步的处理不同
120+
- [example15](src/main/java/com/brianway/learning/java/multithread/communication/example15)
121+
- [Run15_join_sleep.java](src/main/java/com/brianway/learning/java/multithread/communication/example15/Run15_join_sleep.java):`join(long)``sleep(long)` 的区别,`sleep(long)` 方法不释放锁
122+
- [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)` 释放锁
123+
- [Run15_joinMore.java](src/main/java/com/brianway/learning/java/multithread/communication/example15/Run15_joinMore.java):方法 `join` 后面的代码提前运行
124+
- [example16](src/main/java/com/brianway/learning/java/multithread/communication/example16)
125+
- [Run16_InheritableThreadLocalExt.java](src/main/java/com/brianway/learning/java/multithread/communication/example16/Run16_InheritableThreadLocalExt.java):类 `InheritableThreadLocal` 使用,值继承,子线程从父线程取得值
126+
- [Run16_InheritableThreadLocalExt2.java](src/main/java/com/brianway/learning/java/multithread/communication/example16/Run16_InheritableThreadLocalExt2.java):类 `InheritableThreadLocal` 使用,值继承再更改
127+
- [Run16_ThreadLocal.java](src/main/java/com/brianway/learning/java/multithread/communication/example16/Run16_ThreadLocal.java):验证线程变量的隔离性
128+
129+
130+
## lock
131+
132+
- [example1](src/main/java/com/brianway/learning/java/multithread/lock/example1)
133+
- [Run1_UseConditionWaitNotify.java](src/main/java/com/brianway/learning/java/multithread/lock/example1/Run1_UseConditionWaitNotify.java):使用 Condition 实现等待通知,Condition 对象的 `await()`方法,线程`WAITING`
134+
- [Run1_UseConditionWaitNotifyError.java](src/main/java/com/brianway/learning/java/multithread/lock/example1/Run1_UseConditionWaitNotifyError.java):`IllegalMonitorStateException`,监视器出错
135+
- [Run1_UseConditionWaitNotifyOk.java](src/main/java/com/brianway/learning/java/multithread/lock/example1/Run1_UseConditionWaitNotifyOk.java):正确使用Condition实现等待通知
136+
- [example2](src/main/java/com/brianway/learning/java/multithread/lock/example2)
137+
- [Run2_MustUseMoreCondition.java](src/main/java/com/brianway/learning/java/multithread/lock/example2/Run2_MustUseMoreCondition.java):使用多个 condition 实现通知部分线程
138+
- [example3](src/main/java/com/brianway/learning/java/multithread/lock/example3)
139+
- [Run3_ConditionManyToMany.java](src/main/java/com/brianway/learning/java/multithread/lock/example3/Run3_ConditionManyToMany.java):实现生产者/消费者模式,多对多交替打印
140+
- [example4](src/main/java/com/brianway/learning/java/multithread/lock/example4)
141+
- [Run4_Fair.java](src/main/java/com/brianway/learning/java/multithread/lock/example4/Run4_Fair.java):公平锁测试,打印结果呈有序状态
142+
- [Run4_notFair.java](src/main/java/com/brianway/learning/java/multithread/lock/example4/Run4_notFair.java):非公平锁测试,打印结果乱序,先启动的线程不一定先获得锁
143+
- [example5](src/main/java/com/brianway/learning/java/multithread/lock/example5)
144+
- [Run5_getHoldCount.java](src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getHoldCount.java):测试方法 `int getHoldCount()`
145+
- [Run5_getQueueLength.java](src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getQueueLength.java):测试方法 `int getQueueLength()`
146+
- [Run5_getWaitQueueLength.java](src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getWaitQueueLength.java):测试方法 `int getWaitQueueLength(Condition condition)`
147+
- [example6](src/main/java/com/brianway/learning/java/multithread/lock/example6)
148+
- [Run6_hasQueueThread.java](src/main/java/com/brianway/learning/java/multithread/lock/example6/Run6_hasQueueThread.java):测试方法 `boolean hasQueueThread(Thread thread)``boolean hasQueueThreads()`
149+
- [Run6_hasWaiters.java](src/main/java/com/brianway/learning/java/multithread/lock/example6/Run6_hasWaiters.java):测试方法 `boolean hasWaiters(Condition)`
150+
- [example7](src/main/java/com/brianway/learning/java/multithread/lock/example7)
151+
- [Run7_isFair.java](src/main/java/com/brianway/learning/java/multithread/lock/example7/Run7_isFair.java):测试方法 `boolean isFair()`
152+
- [Run7_isHeldByCurrentThread.java](src/main/java/com/brianway/learning/java/multithread/lock/example7/Run7_isHeldByCurrentThread.java):测试方法 `boolean isHeldByCurrentThread()`
153+
- [Run7_isLocked.java](src/main/java/com/brianway/learning/java/multithread/lock/example7/Run7_isLocked.java):测试方法 `boolean isLocked()`
154+
- [example8](src/main/java/com/brianway/learning/java/multithread/lock/example8)
155+
- [Run8_lockInterruptibly1.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_lockInterruptibly1.java):测试方法 `void lockInterruptibly()`
156+
- [Run8_lockInterruptibly2.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_lockInterruptibly2.java):测试方法 `void lockInterruptibly()`
157+
- [Run8_tryLock.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_tryLock.java):测试方法 `boolean tryLock()`
158+
- [Run8_tryLock_param.java](src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_tryLock_param.java):测试方法 `boolean tryLock(long timeout,TimeUnit unit)`
159+
- [example9](src/main/java/com/brianway/learning/java/multithread/lock/example9)
160+
- [Run9_awaitUniterruptibly1.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUniterruptibly1.java):测试方法 `awaitUniterruptibly()`
161+
- [Run9_awaitUniterruptibly2.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUniterruptibly2.java):测试方法 `awaitUniterruptibly()`
162+
- [Run9_awaitUntil1.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUntil1.java):测试方法 `awaitUntil()`
163+
- [Run9_awaitUntil2.java](src/main/java/com/brianway/learning/java/multithread/lock/example9/Run9_awaitUntil2.java):测试方法 `awaitUntil()`
164+
- [example10](src/main/java/com/brianway/learning/java/multithread/lock/example10)
165+
- [Run10_condition.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_condition.java):Condition 实现顺序打印
166+
- [Run10_ReadWriteLockBegin1.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_ReadWriteLockBegin1.java):类 `ReentrantReadWriteLock` 的使用:读读共享
167+
- [Run10_ReadWriteLockBegin2.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_ReadWriteLockBegin2.java):类 `ReentrantReadWriteLock` 的使用:写写互斥
168+
- [Run10_ReadWriteLockBegin3.java](src/main/java/com/brianway/learning/java/multithread/lock/example10/Run10_ReadWriteLockBegin3.java):类 `ReentrantReadWriteLock` 的使用:读写互斥

java-multithread/src/main/java/com/brianway/learning/java/multithread/lock/example4/Run4_notFair.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* P218
99
* 非公平锁测试
10-
* 打印结果乱序,县启动的线程不一定先获得锁
10+
* 打印结果乱序,先启动的线程不一定先获得锁
1111
*/
1212
public class Run4_notFair {
1313
public static void main(String[] args) {

java-multithread/src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getHoldCount.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
/**
88
* P219
9-
* 测试int getHoldCount()方法
9+
* 测试方法int getHoldCount()
1010
* 查询当前线程保持此锁定的个数,即调用lock()方法的次数
1111
*/
1212
public class Run5_getHoldCount {

java-multithread/src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getQueueLength.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
/**
88
* P220
9-
* 测试int getQueueLength()方法
9+
* 测试方法int getQueueLength()
1010
* 返回正在等待获取此锁定的线程估计数
1111
*/
1212
public class Run5_getQueueLength {

java-multithread/src/main/java/com/brianway/learning/java/multithread/lock/example5/Run5_getWaitQueueLength.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
/**
88
* P221
9-
* 测试int getWaitQueueLength(Condition condition)方法
10-
* 返回等待与此锁定相关的给定条件Conditon的线程估计数
9+
* 测试方法int getWaitQueueLength(Condition condition)
10+
* 返回等待与此锁定相关的给定条件Condition的线程估计数
1111
*/
1212
public class Run5_getWaitQueueLength {
1313
public static void main(String[] args) throws InterruptedException {

java-multithread/src/main/java/com/brianway/learning/java/multithread/lock/example6/Run6_hasQueueThread.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
/**
88
* P222
9-
* 测试boolean hasQueueThread(Thread thread)
9+
* 测试方法boolean hasQueueThread(Thread thread)
1010
* 查询指定的线程是否正在等待获取此锁定
11-
* 测试boolean hasQueueThreads()
11+
* 测试方法boolean hasQueueThreads()
1212
* 查询是否有线程正在等待获取此锁定
1313
*/
1414
public class Run6_hasQueueThread {

java-multithread/src/main/java/com/brianway/learning/java/multithread/lock/example8/Run8_tryLock.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* P228
99
* 测试方法boolean tryLock()
10-
* 尽在调用时锁定未被另一个线程保持的情况下,才获取该锁定
10+
* 仅在调用时锁定未被另一个线程保持的情况下,才获取该锁定
1111
*/
1212
public class Run8_tryLock {
1313
public static void main(String[] args) {

0 commit comments

Comments
 (0)