04 2017 档案

摘要:为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。他们都在Java.utilconcurrent包中,是JDK并发包的核心。其中有一个比较重要的类:Executors,他扮演着线程工厂的角色,我们通过Executors可以创建特定功能的线程池。 Exec 阅读全文
posted @ 2017-04-24 22:50 優syousetu 阅读(193) 评论(0) 推荐(0)
摘要:生产者消费者也是一个非常经典的多线程模式,我们在实际开发中应用非常广泛的思想理念。在生产者-消费模式中:通常由两类线程,即若干个生产者的线程和若干个消费者的线程。生产者线程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务,在生产者和消费者之间通过共享内存缓存区进行通信。 MQ:messag 阅读全文
posted @ 2017-04-24 15:53 優syousetu 阅读(331) 评论(0) 推荐(0)
摘要:Master-worker模式是常用的并行计算模式。它的核心思想是系统是由两类进程协助工作:Master进行和worker进程。Master负责接收和分配任务,worker负责处理子任务。当各个worker子进程处理完成后,会返回结果给master,由master做归纳和总结。其好处是能将一个大任务 阅读全文
posted @ 2017-04-24 12:10 優syousetu 阅读(230) 评论(0) 推荐(0)
摘要:并行设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行程序相比,并行结构的程序通常更为复杂。因此合理的使用并行模式在多线程开发中更具有意义,在这里主要介绍future、master-woeker和生产者-消费者模型。 future模式有点类似于商品订单。比如在网购时,当看中 阅读全文
posted @ 2017-04-24 09:46 優syousetu 阅读(212) 评论(0) 推荐(0)
摘要:Deque允许在队列的头部或尾部进行出队和入队操作 LinkedBlockingDeque是一个线程安全的双端队列实现,可以说他是最为复杂的一种队列,在内部实现维护了前端和后端节点,但是其没有实现读写分离,因此同一时间只能有一个线程对其进行操作。在高并发中性能要远低于其他BlockingQueue。 阅读全文
posted @ 2017-04-24 08:30 優syousetu 阅读(158) 评论(0) 推荐(0)
摘要:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论是哪种,都继承自Queue ConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态 阅读全文
posted @ 2017-04-19 11:51 優syousetu 阅读(164) 评论(0) 推荐(0)
摘要:JDK5.0以后提供了多种并发类容器来替代同步类容器从而改善性能。同步类容器的状态都是串行化的。他们虽然实现了线程安全,但严重降低了并发性,在多线程环境时,严重降低了应用程序的吞吐量。并发类容器是专门针对并发设计的,使用ConcurrentHashMap来代替给予散列的传统的hashTable,而在 阅读全文
posted @ 2017-04-18 21:16 優syousetu 阅读(203) 评论(0) 推荐(0)
摘要:同步类容器都是线程安全的,但在某些场景下需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificati 阅读全文
posted @ 2017-04-18 19:55 優syousetu 阅读(104) 评论(0) 推荐(0)
摘要:单例模式,最常见的就是饥饿模式和懒汉模式,饥饿模式直接实例化对象,懒汉模式在调用方法时进行实例化对象(如果有了就不创建了)。在多线程模式中,考虑到性能和线程安全问题,我们一般选择下面两种比较经典的单例模式,在性能提高的同时,又保证了线程安全。 dubble check instance 两层的if, 阅读全文
posted @ 2017-04-18 18:36 優syousetu 阅读(138) 评论(0) 推荐(0)
摘要:ThreadLocal概念:线程局部变量,是一种多线程并发访问变量的解决方案。与其synchronized等加锁方式不同,ThreadLocal完全不提供锁,而是用以空间换时间的手段,为每个线程提供变量独立的副本,以保证线程安全。从性能上来说,ThreadLocal不具有绝对优势,在并发不是很高的时 阅读全文
posted @ 2017-04-18 18:12 優syousetu 阅读(137) 评论(0) 推荐(0)
摘要:使用wait/notify模拟queue BlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据。我们要实现LinkedBlockingQueue,下面两个简单的方法put和take。 put(anObject):把anObject加到BlockingQue 阅读全文
posted @ 2017-04-18 17:50 優syousetu 阅读(294) 评论(0) 推荐(0)
摘要:线程通信的概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。 使用wait/notify方法实现线 阅读全文
posted @ 2017-04-18 11:44 優syousetu 阅读(173) 评论(0) 推荐(0)
摘要:volatile概念:volatile关键字的主要作用是使变量在多个线程间可见 代码1:isRunning变量并没有设置为volatile 运行结果: 运行结果:此时,虽然改变了isRunning的值,但是线程中的值并没有改变 java JDK1.5以后,会为线程专门分配一块内存,将主内存中的数据c 阅读全文
posted @ 2017-04-17 21:34 優syousetu 阅读(166) 评论(0) 推荐(0)
摘要:线程安全的概念: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或者方法)就是线程安全的。 synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或“临界区” 线程不安全的时候: 运行结果: 线程安全: 运行结果: 总结: 当多 阅读全文
posted @ 2017-04-17 16:15 優syousetu 阅读(170) 评论(0) 推荐(0)