多线程
做最专注的自己
这个作者很懒,什么都没留下…
展开
-
多线程基础(一)
线程安全概念:当多个对象访问某一个类(对象或方法)时,这个类始终都表现出正确的行为,那么这个类(对象或方法)就是线程安全的。synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区或临界区。public class MyThread extends Thread { private int count = 5; //synchronized pub...原创 2018-11-03 07:58:09 · 160 阅读 · 0 评论 -
线程之间的通信(二)
线程之间通信概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就是成为整体的比用方式之一。当线程存在通信指挥,系统间的交互性会更强,在提高CPU利用率的同时还会使开发人员对线程任务处理的过程中进行有效的把控和监督。使用wait/notify方法实现线程间的通信(这两个方法都是Ojbect的类方法,也就是说java为所有的对象都提供了这两个方法...原创 2018-11-03 11:46:21 · 161 阅读 · 0 评论 -
同步类容器和并发类容器(三)
同步类容器同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的就是ConcurrentModificationException,原因是当容器迭代过程中,被并发地修改了内容,这是由于早期迭...原创 2018-11-03 13:36:14 · 212 阅读 · 0 评论 -
锁(八)
锁在java多线程中,我们知道使用synchronized关键字来实现线程间的同步互斥操作,那么其实还有一个更优秀的机制去完成“同步互斥”工作,它就是Lock对象,即重入锁和读写锁。他们具有比synchronized更为强大的功能,并且具有嗅探锁定、多路分支等功能。ReentrantLock(重入锁)概念:在需要进行同步的代码部分加上锁定,但最后一定要释放锁,不然会造成锁用于无法释放,其...原创 2018-11-06 09:25:02 · 254 阅读 · 0 评论 -
Queue(四)
并发Queue在并发队列上,JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。ConcurrentLinkedQueue是一种适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQ...原创 2018-11-03 18:06:26 · 224 阅读 · 0 评论 -
多线程设计模式(五)
并行设计模式属于优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行相比,并行程序的结构通常更为复杂。因此合理的使用并行模式在多线程开发中更具有意义。Future模式Future模式有点类似商品订单。比如网购时,当看重某一件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们的Ajax请求的时候,页面是异步的进行后台处理,用户无须一直等待请求结果,可...原创 2018-11-04 14:10:14 · 253 阅读 · 0 评论 -
Disruptor并发框架(九)
Disruptor并发框架简介Disruptor是一个开源的并发框架,能够在无锁的情况下实现网络的Queue并发操作。Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量级JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。参考系列文档:http://ifeve.com/disruptor-getting-started/Disruptor ...原创 2018-11-07 20:44:36 · 3964 阅读 · 0 评论 -
Executor(六)
Executor框架为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效进行线程控制。他们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类Executors,他扮演线程工厂的角色,我们通过Executors可以创建特定功能的线程池,Executors创建线程池的方法:newFixedThreadPool():该方法返...原创 2018-11-05 18:29:31 · 179 阅读 · 0 评论 -
util.concurrent下的常用工具类(七)
CountDownLacth的使用CountDownLacth经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作(一个线程等待其他所有线程的通知后再执行)。public class UseCountDownLatch { public static void main(String[] args) { //这里的初始化参数表示只要countDown()方法被线程调用两次...原创 2018-11-05 21:01:13 · 250 阅读 · 0 评论