七周七并发模型学习-week1

来源:互联网 发布:布尔玛和孙悟空 知乎 编辑:程序博客网 时间:2024/06/06 02:31

   上班之后发现自己真是渣,最近不忙好好学习。。在网上下载的《七周七并发模型》,配合书中的讲解和课后问题,做下笔记。

Day1: 

1. Java内存模型-jsr133规范介绍

2. 用happen-before规则分析DCL

    其中,第二篇文章中,对DCL的分析,线程2在第一次判断instance == null时,得到instance对象,并不等同于instance对象已经完全创建完成并且将内部成员初始化完成,new一个对象的过程并不是原子的,简单来说,可以分为几个步骤,1 分配内存空间 2 创建空的对象 3 初始化空的对象 4 完成对象引用指向,由于这几个步骤处理器可能并发执行,比如3,4 并发执行,所以在new操作完成之后,对象不一定马上初始化完成,所以在get方法的时候,内部成员的值可能还未初始化。这也是第二篇分析的DCL的漏洞原因。


Day2:

1. ReentrantLock之公平锁与非公平锁浅析

2. java线程虚假唤醒

3. volatile与AtomicIntegerfieldupdater 区别与关系

4. 高级并发编程学习-atomic包学习(重点介绍AtomicInteger、AtomicIntegerFieldUpdater)

对于虚假唤醒,除了2中那种情况,如果调用signalAll/notifyAll的话,会唤起多个线程,而各自线程不再检查,也会抛出异常。

package signalAllTest;import java.util.ArrayList;import java.util.List;public class NotifyAllTest {static class MyStack {private List<String> list = new ArrayList<String>();public synchronized void push(String value) {synchronized (this) {list.add(value);System.out.println("Produce run! value is " + value);notifyAll();}}public synchronized String pop() throws InterruptedException {synchronized (this) {if (list.size() <= 0) {wait();}System.out.println("Consumer run!");return list.remove(list.size() - 1);}}}// 生产者static class Produce implements Runnable {private MyStack exp;public Produce(MyStack exp) {this.exp = exp;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}exp.push("i is " + i);}}}// 消费者static class Consumer implements Runnable {private MyStack exp;public Consumer(MyStack exp) {this.exp = exp;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {try {exp.pop();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public static void main(String[] args) {MyStack exp = new MyStack();Produce produce = new Produce(exp);Consumer consumer = new Consumer(exp);new Thread(produce, "线程A").start();new Thread(consumer, "线程B").start();new Thread(consumer, "线程C").start();}}

运行结果:

Produce run! value is i is 0Consumer run!Consumer run!Exception in thread "线程C" java.lang.ArrayIndexOutOfBoundsException: -1at java.util.ArrayList.elementData(ArrayList.java:418)at java.util.ArrayList.remove(ArrayList.java:495)at signalAllTest.SignalTest$MyStack.pop(SignalTest.java:25)at signalAllTest.SignalTest$Consumer.run(SignalTest.java:63)at java.lang.Thread.run(Thread.java:748)Produce run! value is i is 1Consumer run!Produce run! value is i is 2Consumer run!……


Day3

1.  Java并发编程:CountDownLatch、CyclicBarrier和Semaphore  这篇文章真的大赞!

2. 阿姆达尔定律:S=1/(1-a+a/n) S加速比,a为并行所占比例,n是并行节点个数,理论上,a越接近于1,n越大,加速比越高


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 www.6yry57.con www.yemalu.uco 1v1高肉甜宠 tube14护士14个视频 特殊的检查h 刘诗诗人工智能ai让女神们下海视频 架起杨超越的玉腿猛击 日越南幼儿真的插到底了\\\\/favicon.ico 架起江疏影的玉腿猛击 综艺猜人游戏父亲女儿在线看 第五十五章骑了杨颖婚礼 迪丽热巴光着身子让鹿晗看 强睡警母 赵丽颖把腿张来男人捅视频 第一百零一章 拿下欧阳娜娜 官家 不信天上掉馅饼 妓媛馆app 2018良心不收费黄播软件 40ml理肤泉k乳真假辨别 看天下妹子神器荔枝视频 荔枝视频 东北老熟高清视频在线播放 国产足jiaomp4 chinese中国china王伦69 二ie级c片 今期开码结果开奖 old man中国国产帅老 老头恋gaysex bdsm最残忍bdsm 平安一账通官网登录 新婚夜要被开处又羞又怕 明里友香退休公公视频 游艇上的父子换媳 妻子被部长D去了8 年轻的母亲6 夜愿高三第一季初体验 老板燃气灶7b13说明书 休真小农民李山全文免费阅读 香港王中王特马料 一家四口的卡通萌照 换C俱乐