并发编程艺术
你不在我都在
这个作者很懒,什么都没留下…
展开
-
《Java并发编程的艺术》第三章读书笔记——3.3顺序一致性
3.3顺序一致性顺序一致性内存模型是一个理论参考模型,在设计的时候,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照。3.3.1 数据竞争与顺序一致性JMM对正确同步的多线程程序的内存一致性做了如下保证:如果程序是正确同步的,程序的执行将具有顺序一致性 ——即程序的执行结果与该程序的顺序一致性内存模型中的执行结果相同。3.2.2 顺序一致性内存模型顺序一致性内存模型...原创 2019-07-28 23:09:26 · 260 阅读 · 0 评论 -
多线程——Lock的使用
Lock介绍:lock关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。Lock是一个接口,其中常用的方法有:尝试获取锁,获取成功则返回,否则阻塞当前线程void lock();尝试获取锁,线程在成功获取锁之前被中断,则放弃获取锁,抛出异常 void lockInterruptib...原创 2019-04-12 11:27:43 · 2549 阅读 · 0 评论 -
多线程——synchronize的用法
synchronized介绍因为在开发中会遇到“线程安全”与“非线程安全”相关的技术点,“非线程安全”其实会在对多个线程对同一个对象的实例变量进行并发访问时发生,产生的结果就是“脏读”,也就是取到的数据其实是被更改过的。而“线程安全”就是以获得的实例变量的值是经过同步处理的,不会出现“脏读”的现象。 因此为了解决“非线程安全”的问题就需要使用锁,也就是synchronized,synchroni...原创 2019-04-11 17:13:59 · 1051 阅读 · 0 评论 -
多线程——Condition的介绍以及用法
之前总结了wait和notify的用法,今天总结一下condition的用法。Condition介绍:关键字synchronize可以与wait()和nitify()方法相结合实现实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助condition对象。condition类是在JDK5中出现的技术,使用他有更好的灵活性,比如可以实现多路通知功能,也就是在一个Loc...原创 2019-04-10 16:29:48 · 5534 阅读 · 0 评论 -
多线程——多线程状态以及wait(), notify(), notifyAll()等方法介绍
Java线程的基本状态:说明:线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时...原创 2019-04-09 15:33:07 · 967 阅读 · 0 评论 -
多线程——使用多线程
最近把《Java多线程编程核心技术》一书看了一遍,为了让自己更好的理解,写博客记录一下自己得感悟。Java 提供了三种创建线程的方法:通过实现 Runnable 接口;通过继承 Thread 类本身;通过 Callable 和 Future 创建线程Thread 方法序号详解1public void start() : 使该线程开始执行;Java 虚拟机调用该...原创 2019-04-08 16:20:10 · 287 阅读 · 0 评论 -
《Java并发编程的艺术》第九章读书笔记——Java中的线程池
在开发过程中,合理地使用线程池能够带来3个好处:降低资源消耗提高响应速度提高线程的可管理性9.1 线程池的实现原理从图中可以看到当提交一个新的任务到线程池时,线程池的处理流程:线程池判断核心线程池里的线程是否都在执行任务,如果没有,则创建新的线程来执行任务,如果核心线程都满了,则进入下一步。线程池判断当前工作队列是否都满了,如果没有满,则将新提交的任务存储在队列中。如果满了,...原创 2019-08-19 23:23:48 · 160 阅读 · 0 评论 -
《Java并发编程的艺术》第三章读书笔记——3.7 happens-before
3.7.1 JMM设计设计意图程序员对内存模型的使用编译器和处理器对内存模型的实现从图中可以看到:JMM向程序员提供的happens-before规则能满足程序员的需求JMM对编译器和处理器的束缚已经尽可能少。3.7.2 happens-before的定义《JSR-133:Java Memory MOdel and Thread Specification》对happen...原创 2019-08-19 18:14:14 · 154 阅读 · 0 评论 -
《Java并发编程的艺术》第三章读书笔记——3.6 final域的内存语义
3.6.1 final域的重排序规则对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之前不能重排序。public clas FinalExample{ int i ; ...原创 2019-08-19 11:49:17 · 119 阅读 · 0 评论 -
《Java并发编程的艺术》第三章读书笔记——3..5 锁的内存语义
3.5.1 锁的释放–获取建立的happens-before关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。3.5.2 锁的释放后和获取的内存语义当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效。总结:锁释放与volatile写有相同的语...原创 2019-08-19 11:02:32 · 103 阅读 · 0 评论 -
《Java并发编程的艺术》第三章读书笔记——3.2 重排序
3.2重排序重排序是指编译器和处理器为了优化性能而对指令序列进行重排序的一种手段。3.2.1数据依赖性如果两个操作访问同一个变量,且这两个操作有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖性分为3种:写后读写后写读后写编译器和处理器在重排序时,会遵守数据依赖性,这里所说的数据依赖性仅针对单个处理器中执行的指令序列和单个线程中执行的操作。3.2.2 as-if-se...原创 2019-07-28 14:23:27 · 141 阅读 · 0 评论 -
《Java并发编程的艺术》第三章读书笔记——3.4 volatile的内存语义
3.4 volatile的内存语义3.4.1 volatile的特性class VolatileFeaturesExample { volatile long v1 = 0L; //使用volatile声明64位的long型变量 public void set(long l) { v1 = l; ...原创 2019-08-01 18:04:59 · 131 阅读 · 0 评论 -
《Java并发编程的艺术》第三章读书笔记——3.1 JAVA内存模型的基础
3.1.1 - 3.1.2 Java并发基础与内存模型在并发编程中,需要处理两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。JAVA的并发采用的是共享内存模型,JAVA线程之间的通信是总是隐式进行。JAVA线程之间的通信由JAVA内存模型控制(JMM),JMM决定一个线程对共享变量的写入何时对另...原创 2019-07-28 12:50:04 · 149 阅读 · 0 评论 -
《Java并发编程的艺术》第二章读书笔记
2.1volatile应用在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。如果volatile变量修饰使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切...原创 2019-07-26 15:23:08 · 178 阅读 · 0 评论 -
深入研究 Java Synchronize 和 Lock 的区别与用法
在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。我们先从最简单的入手,逐步分析这2种的区别。一、synchronized和lock的用法区别synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加...转载 2019-04-23 14:25:01 · 129 阅读 · 0 评论