java并发编程资料梳理
1.JUC基础:
http://www.goldendoc.org/2011/05/juc/
2.Java并发编程J.U.C之锁的获取与释放
http://www.goldendoc.org/2011/06/lock_acquire_release/
3.Java并发编程J.U.C之Condition
http://goldendoc.iteye.com/blog/1096763
4.锁
1)非阻塞算法-ReentrantLock代码剖析之ReentrantLock.lock
http://www.iteye.com/topic/623398
5.Java 多线程与并发编程专题http://www.ibm.com/developerworks/cn/java/j-concurrent/
2)violate
volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有锁机制。volatile并不能保证线程安全的,也就是说volatile字段的操作不是原子性的,volatile变量只能保证可见性(一个线程修改后其它线程能够理解看到此变化后的结果)
应用volatile变量的三个原则:
(1)写入变量不依赖此变量的值,或者只有一个线程修改此变量
(2)变量的状态不需要与其它变量共同参与不变约束
(3)访问变量不需要加锁
3)Condition
wait 和 notify。那么Condition的优势是支持多路等待,就是我可以定义多个Condition,每个condition控制线程的一条执行通路。传统方式只能是一路等待。
http://wangpengfei360.iteye.com/blog/1423273
5.java线程学习:
http://hi.baidu.com/kevindoudou/blog/item/cfcf880f98c5be2f6059f3a2.html
http://hi.baidu.com/kevindoudou/blog/item/d6cca1f01d09c6c67931aaae.html
http://hi.baidu.com/kevindoudou/blog/item/dd79883d020333eb3c6d977a.html
http://hi.baidu.com/kevindoudou/blog/item/0249a2cb39769e1abe09e6de.html
http://hi.baidu.com/kevindoudou/blog/item/167e25032f75ba8dd43f7cde.html
6.threadPoolExecutor:
http://dongxuan.iteye.com/blog/901689
http://blog.csdn.net/robage/article/details/1620691
线程池:
自建线程池例子:http://apps.hi.baidu.com/share/detail/32246373,待实践
7.java线程安全
总结的非常好:
http://www.iteye.com/topic/806990
http://www.iteye.com/topic/808550
8.CountDownLatch
在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决?
如果是一个线程等待一个线程,则可以通过await()和notify()来实现;
如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制。
CountDownLatch使得使用CountDownLatch.await()的线程(当前线程)阻塞直到所有其它拥有CountDownLatch的线程执行完毕(countDown()结果为0)
实例:http://iamzhongyong.iteye.com/blog/1439310
说明:
L28
//等待开始信号信号 ,在L9 s.countDown()未执行前(计数器变为0),线程都会阻塞在此
startSingal.await();
一旦s.countDown执行完,计数器变为0后,L9后的代码和L28后的代码无序执行
两个顺序:
1)信号开始(i am the judge ,now ,i start the singal),所有的线程才会“start to executer”,在此之前,6个thread
都在准备状态(当然,有的并未做好准备,所以信号开始了,有的还没执行L26)
2)所有线程执行完后(L11 e.await()控制),最终主线程执行最后"all is over"
http://iamzhongyong.iteye.com/blog/1458349
9.探索java并发编程
http://www.iteye.com/topic/730241