| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,28 +2,73 @@ | |||
| 2 | 2 | ||
| 3 | 3 | 知识点的文字梳理请参考这篇文章:[java多线程核心技术梳理](http://blog.csdn.net/h3243212/article/details/51180173) | |
| 4 | 4 | ||
| 5 | - 下面对该模块的几个部分作说明: | ||
| 5 | + 下面对该模块的几个包作说明: | ||
| 6 | 6 | ||
| 7 | 7 | ## meet | |
| 8 | 8 | ||
| 9 | 9 | 该部分是一些简单的基础知识的展示 | |
| 10 | 10 | ||
| 11 | 11 | - [printMain.java](src/main/java/com/brianway/learning/java/multithread/meet/printMain.java):打印当前线程名称 | |
| 12 | 12 | - [Run.java](src/main/java/com/brianway/learning/java/multithread/meet/Run.java):非线程安全的数据共享 | |
| 13 | - - [Run2_StartVsRun.java](src/main/java/com/brianway/learning/java/multithread/meet/Run2_StartVsRun.java):run()和start()的区别 | ||
| 14 | - - [Run3_getName.java](src/main/java/com/brianway/learning/java/multithread/meet/Run3_getName.java):this.getName()!=Thread.currentThread().getName(),这是两个概念 | ||
| 15 | - - [Run4_isAlive01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run4_isAlive01.java):isAlive() | ||
| 16 | - - [Run5_isAlive02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run5_isAlive02.java):isAlive() | ||
| 17 | - - [Run6_StartVsRun02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run6_StartVsRun02.java):run()同步执行,start()异步执行 | ||
| 13 | + - [Run2_StartVsRun.java](src/main/java/com/brianway/learning/java/multithread/meet/Run2_StartVsRun.java):`run()` 和 `start()` 的区别 | ||
| 14 | + - [Run3_getName.java](src/main/java/com/brianway/learning/java/multithread/meet/Run3_getName.java):`this.getName()!=Thread.currentThread().getName()`,这是两个概念 | ||
| 15 | + - [Run4_isAlive01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run4_isAlive01.java):`isAlive()` | ||
| 16 | + - [Run5_isAlive02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run5_isAlive02.java):`isAlive()` | ||
| 17 | + - [Run6_StartVsRun02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run6_StartVsRun02.java):`run()` 同步执行,`start()` 异步执行 | ||
| 18 | 18 | - [Run7_interrupt01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run7_interrupt01.java):停止线程 | |
| 19 | 19 | - [Run8_interrupted01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run8_interrupted01.java):判断线程是否停止状态,测试当前线程是否已经中断 | |
| 20 | - - [Run9_interrupted02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run9_interrupted02.java):线程的中断状态由interrupted()清除 | ||
| 21 | - - [Run10_isInterrupted.java](src/main/java/com/brianway/learning/java/multithread/meet/Run10_isInterrupted.java):isInterrupted(),不清除状态标记 | ||
| 22 | - - [Run11_sleepAndinterrupt01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run11_sleepAndinterrupt01.java):睡眠中停止,先进入的sleep,再interrupt() | ||
| 23 | - - [Run12_sleepAndinterrupt02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run12_sleepAndinterrupt02.java):先interrupt(),再进入sleep(),直接进异常 | ||
| 24 | - - [Run13_suspendAndresume01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run13_suspendAndresume01.java):暂停线程,suspend()与resume() | ||
| 25 | - - [Run14_suspendAndresume02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run14_suspendAndresume02.java):suspend()与resume()的缺点:独占 | ||
| 26 | - - [Run15_suspendAndresume03.java](src/main/java/com/brianway/learning/java/multithread/meet/Run15_suspendAndresume03.java):suspend()独占锁问题,println() | ||
| 27 | - - [Run16_yield.java](src/main/java/com/brianway/learning/java/multithread/meet/Run16_yield.java):测试yield() | ||
| 20 | + - [Run9_interrupted02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run9_interrupted02.java):线程的中断状态由 `interrupted()` 清除 | ||
| 21 | + - [Run10_isInterrupted.java](src/main/java/com/brianway/learning/java/multithread/meet/Run10_isInterrupted.java):`isInterrupted()`,不清除状态标记 | ||
| 22 | + - [Run11_sleepAndinterrupt01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run11_sleepAndinterrupt01.java):睡眠中停止,先进入的 `sleep()`,再 `interrupt()` | ||
| 23 | + - [Run12_sleepAndinterrupt02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run12_sleepAndinterrupt02.java):先 `interrupt()`,再进入 `sleep()`,直接进异常 | ||
| 24 | + - [Run13_suspendAndresume01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run13_suspendAndresume01.java):暂停线程,`suspend()` 与 `resume()` | ||
| 25 | + - [Run14_suspendAndresume02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run14_suspendAndresume02.java):`suspend()` 与 `resume()` 的缺点:独占 | ||
| 26 | + - [Run15_suspendAndresume03.java](src/main/java/com/brianway/learning/java/multithread/meet/Run15_suspendAndresume03.java):`suspend()` 独占锁问题,`println()` | ||
| 27 | + - [Run16_yield.java](src/main/java/com/brianway/learning/java/multithread/meet/Run16_yield.java):测试 `yield()` | ||
| 28 | 28 | - [Run17_priority01.java](src/main/java/com/brianway/learning/java/multithread/meet/Run17_priority01.java):线程优先级的继承性 | |
| 29 | 29 | - [Run18_priority02.java](src/main/java/com/brianway/learning/java/multithread/meet/Run18_priority02.java):优先级具有规则性 | |
| 30 | + | ||
| 31 | + ## synchronize | ||
| 32 | + | ||
| 33 | + - [example1](src/main/java/com/brianway/learning/java/multithread/synchronize/example1) | ||
| 34 | + - [Run1_local.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example1/Run1_local.java):方法内局部变量则不存在“非线程安全”问题 | ||
| 35 | + - [example2](src/main/java/com/brianway/learning/java/multithread/synchronize/example2) | ||
| 36 | + - [Run2_private01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example2/Run2_private01.java):实例变量非线程安全 | ||
| 37 | + - [Run2_twoObject.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example2/Run2_twoObject.java):多个对象多个锁 | ||
| 38 | + - [example3](src/main/java/com/brianway/learning/java/multithread/synchronize/example3) | ||
| 39 | + - [Run3_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example3/Run3_synchronized01.java):`synchronized` 方法与锁对象 | ||
| 40 | + - [example4](src/main/java/com/brianway/learning/java/multithread/synchronize/example4) | ||
| 41 | + - [Run4_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example4/Run4_synchronized01.java):两个线程访问同一个对象的不同方法,线程 B 可异步调用非 `synchronized` 类型方法 | ||
| 42 | + - [example5](src/main/java/com/brianway/learning/java/multithread/synchronize/example5) | ||
| 43 | + - [Run5_lockRein.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example5/Run5_lockRein.java):`synchronized` 锁重入,支持继承 | ||
| 44 | + - [example6](src/main/java/com/brianway/learning/java/multithread/synchronize/example6) | ||
| 45 | + - [Run6_exception.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example6/Run6_exception.java):出现异常,锁自动释放 | ||
| 46 | + - [example7](src/main/java/com/brianway/learning/java/multithread/synchronize/example7) | ||
| 47 | + - [Run7_synNotExtends.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example7/Run7_synNotExtends.java):同步不具继承性 | ||
| 48 | + - [example8](src/main/java/com/brianway/learning/java/multithread/synchronize/example8) | ||
| 49 | + - [Run8_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example8/Run8_synchronized01.java):`synchronized` 方法的弊端 | ||
| 50 | + - [Run8_synchronized02.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example8/Run8_synchronized02.java):同步代码块解决同步方法的弊端 | ||
| 51 | + - [example9](src/main/java/com/brianway/learning/java/multithread/synchronize/example9) | ||
| 52 | + - [Run9_synchronized01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized01.java):当多个线程同时执行`synchronized(x){}`同步代码块时呈现效果 | ||
| 53 | + - [Run9_synchronized01_twoObjects.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized01_twoObjects.java):不同的“对象监视器” | ||
| 54 | + - [Run9_synchronized02.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized02.java):当其他线程执行 x 对象中 `synchronized` 同步方法时呈同步效果 | ||
| 55 | + - [Run9_synchronized03.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example9/Run9_synchronized03.java):当其他线程执行 x 对象里面的`synchronized(this)`代码块时,也呈现同步效果 | ||
| 56 | + - [example10](src/main/java/com/brianway/learning/java/multithread/synchronize/example10) | ||
| 57 | + - [Run10_synBlockMoreObjectOneLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example10/Run10_synBlockMoreObjectOneLock.java):验证同步 `synchronized(class)` 代码块的作用 | ||
| 58 | + - [Run10_synMoreObjectStaticOneLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example10/Run10_synMoreObjectStaticOneLock.java):Class 锁可以对类的所有对象实例起作用 | ||
| 59 | + - [Run10_synTwoLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example10/Run10_synTwoLock.java):验证 `synchronized` 关键字加载 `static` 静态方法和加到非静态方法不是同一个锁 | ||
| 60 | + - [example11](src/main/java/com/brianway/learning/java/multithread/synchronize/example11) | ||
| 61 | + - [Run11_StringAndSyn.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example11/Run11_StringAndSyn.java):String 作为锁对象,常量池->同一锁 | ||
| 62 | + - [Run11_StringAndSyn2.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example11/Run11_StringAndSyn2.java):不使用 String 作为锁对象 | ||
| 63 | + - [example12](src/main/java/com/brianway/learning/java/multithread/synchronize/example12) | ||
| 64 | + - [Run12_deadLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example12/Run12_deadLock.java):死锁测试,jstack命令 | ||
| 65 | + - [example13](src/main/java/com/brianway/learning/java/multithread/synchronize/example13) | ||
| 66 | + - [Run13_inner01.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example13/Run13_inner01.java):内置类和同步测试1 | ||
| 67 | + - [Run13_inner02.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example13/Run13_inner02.java):内置类与同步测试2 | ||
| 68 | + - [example14](src/main/java/com/brianway/learning/java/multithread/synchronize/example14) | ||
| 69 | + - [Run14_setNewStringTwoLock.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example14/Run14_setNewStringTwoLock.java):锁对象改变 | ||
| 70 | + - [example15](src/main/java/com/brianway/learning/java/multithread/synchronize/example15) | ||
| 71 | + - [Run15_synchronized.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example15/Run15_synchronized.java):`synchronized` 代码块有 `volatile` 同步的功能 | ||
| 72 | + - [Run15_volatile.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example15/Run15_volatile.java):不使用 `volatile` 关键字,JVM 配置 `-server` | ||
| 73 | + - [example16](src/main/java/com/brianway/learning/java/multithread/synchronize/example16) | ||
| 74 | + - [Run16_volatile.java](src/main/java/com/brianway/learning/java/multithread/synchronize/example16/Run16_volatile.java):`volatile` 非原子的特性 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | 7 | /** | |
| 8 | 8 | * P101 | |
| 9 | - * 验证同步sychronized(class)代码块的作用 | ||
| 9 | + * 验证同步synchronized(class)代码块的作用 | ||
| 10 | 10 | * 顺便验证了下static方法是不能复写的 | |
| 11 | 11 | * | |
| 12 | 12 | * @see ServiceSub,ServiceSub2 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,12 +6,6 @@ | |||
| 6 | 6 | * P112 | |
| 7 | 7 | * 内置类和同步测试1 | |
| 8 | 8 | */ | |
| 9 | - | ||
| 10 | - /** | ||
| 11 | - * P112 | ||
| 12 | - * 内置类和同步测试1 | ||
| 13 | - */ | ||
| 14 | - | ||
| 15 | 9 | import com.brianway.learning.java.multithread.synchronize.example13.OutClass.Inner; | |
| 16 | 10 | ||
| 17 | 11 | public class Run13_inner01 { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | 7 | /** | |
| 8 | 8 | * P130 | |
| 9 | - * sychronized代码块有volatile同步的功能 | ||
| 9 | + * synchronized代码块有volatile同步的功能 | ||
| 10 | 10 | */ | |
| 11 | 11 | public class Run15_synchronized { | |
| 12 | 12 | public static void main(String[] args) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -12,9 +12,9 @@ public class Run3_synchronized01 { | |||
| 12 | 12 | public static void main(String[] args) { | |
| 13 | 13 | MyObject object = new MyObject(); | |
| 14 | 14 | ThreadA a = new ThreadA(object); | |
| 15 | - a.setName("A"); | ||
| 15 | + a.setName("A "); | ||
| 16 | 16 | ThreadB b = new ThreadB(object); | |
| 17 | - b.setName("B"); | ||
| 17 | + b.setName("B "); | ||
| 18 | 18 | a.start(); | |
| 19 | 19 | b.start(); | |
| 20 | 20 | } | |
@@ -25,16 +25,16 @@ public void methodA()没加synchronized | |||
| 25 | 25 | 输出: | |
| 26 | 26 | begin methodA threadName=B | |
| 27 | 27 | begin methodA threadName=A | |
| 28 | - A end | ||
| 29 | - B end | ||
| 28 | + A end | ||
| 29 | + B end | ||
| 30 | 30 | ||
| 31 | 31 | ------------------- | |
| 32 | 32 | ||
| 33 | 33 | public void methodA()加synchronized | |
| 34 | 34 | 输出: | |
| 35 | 35 | begin methodA threadName=A | |
| 36 | - A end | ||
| 36 | + A end | ||
| 37 | 37 | begin methodA threadName=B | |
| 38 | - B end | ||
| 38 | + B end | ||
| 39 | 39 | ||
| 40 | 40 | */ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -7,7 +7,7 @@ | |||
| 7 | 7 | /** | |
| 8 | 8 | * P76 | |
| 9 | 9 | * 同步代码块解决同步方法的弊端 | |
| 10 | - * 但输出并不是两个c,两个d,原因? | ||
| 10 | + * TODO 但输出并不是两个c,两个d,原因? | ||
| 11 | 11 | */ | |
| 12 | 12 | public class Run8_synchronized02 { | |
| 13 | 13 | public static void main(String[] args) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,7 +9,7 @@ | |||
| 9 | 9 | * synchronized(非this对象x)的三个结论 | |
| 10 | 10 | * 1)当多个线程同时执行synchronized(x){}同步代码块时呈现效果 | |
| 11 | 11 | * 2)当其他线程执行x对象中synchronized同步方法时呈同步效果 | |
| 12 | - * 3)当其他线程执行x对象里面的ynchronized(this)代码块时,也呈现同步效果 | ||
| 12 | + * 3)当其他线程执行x对象里面的synchronized(this)代码块时,也呈现同步效果 | ||
| 13 | 13 | * 验证结论1: | |
| 14 | 14 | * 当多个线程同时执行synchronized(x){}同步代码块时呈现效果 | |
| 15 | 15 | */ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,7 +9,7 @@ | |||
| 9 | 9 | * synchronized(非this对象x)的三个结论 | |
| 10 | 10 | * 1)当多个线程同时执行synchronized(x){}同步代码块时呈现效果 | |
| 11 | 11 | * 2)当其他线程执行x对象中synchronized同步方法时呈同步效果 | |
| 12 | - * 3)当其他线程执行x对象里面的ynchronized(this)代码块时,也呈现同步效果 | ||
| 12 | + * 3)当其他线程执行x对象里面的synchronized(this)代码块时,也呈现同步效果 | ||
| 13 | 13 | * 验证结论2: | |
| 14 | 14 | * 当其他线程执行x对象中synchronized同步方法时呈同步效果 | |
| 15 | 15 | */ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,7 +9,7 @@ | |||
| 9 | 9 | * synchronized(非this对象x)的三个结论 | |
| 10 | 10 | * 1)当多个线程同时执行synchronized(x){}同步代码块时呈现效果 | |
| 11 | 11 | * 2)当其他线程执行x对象中synchronized同步方法时呈同步效果 | |
| 12 | - * 3)当其他线程执行x对象里面的ynchronized(this)代码块时,也呈现同步效果 | ||
| 12 | + * 3)当其他线程执行x对象里面的synchronized(this)代码块时,也呈现同步效果 | ||
| 13 | 13 | * 验证结论1: | |
| 14 | 14 | * 当其他线程执行x对象里面的ynchronized(this)代码块时,也呈现同步效果 | |
| 15 | 15 | */ | |
| Back | FazBrowse Home | New Git URL |
0 commit comments