java并发编程
hotdust
想成为一名JAVA方向的专家,做更多更好的基于JAVA的软件。
展开
-
final变量在多线程程序中的好处
好处:保证在构造函数中的变量设置,对其它线程来说,都是可见的。而且对于通过final变量到达的任意变量,对其它线程也是可见的(例如final Map变量里面的值)。 原因:对于通过final域可到达的变量的写入操作,将不会与构造过程后的操作,一起被重排序。原创 2017-02-17 10:16:11 · 2903 阅读 · 0 评论 -
Java NIO 文章
非常好的入门教程:Java NIO 系列教程例子:Java NIO (Non-blocking I/O) with Server-Client Example:Client向Server单向发送数据的例子。非常简单,挺好的。Java NIO原理 图文分析及代码实现:挺好的Client和Server双向交互的例子,但例子有点老,代码可能需要修改。The Rox Java NIO Tutori原创 2017-06-14 11:36:21 · 313 阅读 · 0 评论 -
高性能Server---Reactor模型
http://www.jianshu.com/p/2461535c38f3无处不在的C/S架构在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的!你发邮件用的Outlook,Foxmail等你看视频用的优酷,土豆等你写文档用的Office365,googleDoc,Evernote等你浏览网页用的IE,Chrome等(B/S是特殊的C/S)......转载 2017-06-12 21:21:31 · 632 阅读 · 0 评论 -
《Java并发编程实战》读书笔记-第4章 对象的共享
1,设置线程安全的类的过程中,需要包含以下3个基本要素。找出构成对象状态的所有变量(例如:有的以一个变量作为一种状态,有的以多个变量的组合作为一种状态)找出约束状态变量的不变性条件(例如:一个Long型变量,使用时规定不能为负值,这个负值就是不可变状态)建立对象状态的并发访问管理策略(例如:是如何同步这些状态,是使用内置锁或私有锁)2,在具体设计时,要按以下步骤:收集同步需求原创 2017-06-12 11:43:53 · 359 阅读 · 0 评论 -
《Java并发编程实战》读书笔记-第3章 对象的共享
1,关于synchronized:一种常见的误解是,认为关键字synchronized只能用于实现原子性或者确定性“临界区(critical section)”。同步还有一另一个重要的方面:内存可见性(Memory Visibility)。我们不仅希望防止某个线程正在使用对象状态,而另一个对象同时修改该状态,而且希望确保当一个线程修改了对象状态后,其它线程能够看到发生的状态变化。2,可见性:是原创 2017-06-12 11:43:16 · 503 阅读 · 0 评论 -
《Java并发编程实战》读书笔记-第2章 线程安全
第2章:线程安全1,什么是线程安全的? 当多个线程访问某个类时,不管运行时环境彩何种调试方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。2,无状态对象一定是线程安全的。例如:一个没有类变量的Servlet。3,原子性:“读取-修改-写入”或“检查后执行”等复合操作(一般指对一个变量),包含了一组必须以原原创 2017-06-12 11:42:01 · 368 阅读 · 0 评论 -
关于进程或机器间通信问题
之看在看Java并发的时候,想过一个问题: 如何在多个JVM之间进行通信呢?在偶然中看到了有 ZeroMQ 和 nanomsg 这两个通信库(nanomsg 好像已经成为了 ZeroMQ的替代品)。可以跨进程,跨主机,还支持多协议,而且还支持多语言。有兴趣的可以试试。原创 2017-05-18 17:24:34 · 676 阅读 · 0 评论 -
关于并发模型 Actor 和 CSP
最近在看《七天七并发模型》这本书,在书上介绍了 Actor 和 CSP 这两种并发模型。这两种模型很像,但还是有一些不同的地方。看完之后,比较困扰的是: 在什么场合使用哪种模型比较好呢?在网上查了一些资料,在没有实现使用这两种模型进行编程的情况下,结合网上的资料,把自己的思考记录一下。下面先说说两种模型的不同点吧。一,主要的不同点1,关于消息发送方和接收方。Actor:注重的处理单元,也就是原创 2017-05-18 16:59:44 · 8658 阅读 · 1 评论 -
关于看完ForkJoinPool和ForkJoinTask文章后一些总结
关于ForkJoinTask:1,可以使用invokeAll(task)方法,主动执行其它的ForkJoinTask,并等待Task完成。(是同步的)2,还可以使用fork方法,让一个task执行(这个方法是异步的)3,还可以使用join方法,让一个task执行(这个方法是同步的,它和fork不同点是同步或者异步的区别)4,可以使用join来取得ForkJoinTask的返回值。由于Recursiv原创 2017-05-09 17:02:42 · 13287 阅读 · 1 评论 -
ForkJoin框架的一些原理知识点
参考: Java 并发编程笔记:如何使用 ForkJoinPool 以及原理 作者 Doug Lea 的论文——《A Java Fork/Join Framework》 ForkJoinPool的commonPool相关参数配置原创 2017-05-11 15:57:29 · 4758 阅读 · 2 评论 -
Java中不同的并发实现的性能比较
看的一篇文章,名为:《Java中不同的并发实现的性能比较》。这篇文件比较了ExecutorService vs. Fork/Join框架 vs. 并行流之间的性能。结论是: 在“CPU/IO密集”型工作中,在使用CPU核数不同时,每种框架的表现也不相同。具体内容大家可以自己看看文章。 但在这篇文章中,有一个细节也需要注意一下,就是关于ForkJoinPool里的commonPool。原创 2017-05-10 17:39:51 · 500 阅读 · 0 评论 -
如何当使用kill命令结束Java进程时,通知正在执行的Java进程
前言: 想要实现的功能是, kill 命令结束正在执行的Java进程时,中断(interrupt)正在执行的Java进程里的线程。原来的想法以为,使用 kill 命令会自动中断(interrupt)那些正在执行的线程,结果和想像的不太一样。在网上找了一下,找到了一个方法来实现这个些想法 正文:主要方法如下: 添加一个ShutdownHook。这样在使用 kill、kill -15、原创 2017-04-08 19:25:55 · 11251 阅读 · 4 评论 -
ThreadPoolExecutor是如何做到线程重用的
前言: 看关于ThreadPoolExecutor参数时,看到了keepaliveTime这个参数,这个参数的意思是:“当线程数大于CorePoolSize时,如果有没有等到新的Task,到了keepaliveTime时间后,就自动终止掉”。那么如果在这个时间之前,等到了新的Task,就可以重用这个线程。到底是怎么重用线程的呢?正文:原理如下: 前提条件:假如coreSize=3,maxS原创 2017-03-22 11:29:18 · 5008 阅读 · 2 评论 -
synchronized和ReentrantLock到底使用哪个?
看了一些并发的文章和书籍,举了一些ReentrantLock和Condition的例子。仔细想一想,其实这些例子使用传统的“对象”和“synchronized”进行锁的方式也是可以实现的,只是有些时候没有ReentrantLock实现起来那么漂亮。所以什么时候应该使用synchronized?什么时候应该使用ReentrantLock呢?下面列举一下各自功能: 功能 synchronized原创 2017-03-20 11:40:52 · 1623 阅读 · 0 评论 -
关于Executor框架相关接口和类的作用
前言 最近看《JAVA并发编程实战》时,对Executor框架相关类和接口的作用不太明白。看了些资料,总结一下这些类的基本含义和功能。原创 2017-01-28 21:13:52 · 1405 阅读 · 0 评论 -
详细分析Java中断机制
http://www.infoq.com/cn/articles/java-interrupt-mechanism1. 引言当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。如果对Java中转载 2017-01-19 12:36:39 · 932 阅读 · 1 评论 -
Java 多线程(六) synchronized关键字详解
http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。 同步机制可以使用synchronized关键字实现。 当synchronized关键字修饰一个方法的时候,该方法叫做同步方转载 2017-01-19 11:58:29 · 223 阅读 · 0 评论 -
【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)
http://blog.csdn.net/ns_code/article/details/17348313转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313happen—before规则介绍 Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作转载 2017-02-17 10:19:15 · 295 阅读 · 0 评论 -
《Java并发编程实战》读书笔记-第5章 基础构建模块
第五章,基础构建模块1,同步容器类。 Vector、HashTable此类的容器是同步容器。但也有一些问题,例如,一个线程在使用Vector的size()方法进行循环每一个元素的时候,而另一个线程对Vector的元素进行删除时,可能会发生ArrayIndexOutOfBoundsException。 如果要避免这个问题,可以在调用Vector进行循环的地方,对Vector实例加锁,但效率非原创 2017-06-12 11:57:21 · 437 阅读 · 0 评论