随笔分类 -  多线程

摘要:一、为什么需要Executor?为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。他们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类:Executors,他扮演着线程工厂的角色,我们通过Executors可 阅读全文
posted @ 2016-08-08 17:22 dongdone 阅读(1021) 评论(0) 推荐(1) 编辑
摘要:三个生产者向一个内存容器中产生数据,另外三个消费者从容器中消费数据。 阅读全文
posted @ 2016-08-08 13:49 dongdone 阅读(2965) 评论(0) 推荐(1) 编辑
摘要:让和hadoop的设计思想是一样的,Master负责分配任务和获取任务的结果,worker是真正处理业务逻辑的。 使用ConcurrentLikedQueue去承载所有的任务,因为会有多个worker会并发修改这个队列。 阅读全文
posted @ 2016-08-08 12:03 dongdone 阅读(2153) 评论(0) 推荐(1) 编辑
摘要:Future模式有点类似于商品订单。比如在网购时,当看中某一件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。 或者说更形象的我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待请求的结果,可以继续浏览或者操作其他内容。 代码实现: 阅读全文
posted @ 2016-08-07 16:43 dongdone 阅读(373) 评论(0) 推荐(1) 编辑
摘要:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 一、ConcurrentLinkedQueue 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状 阅读全文
posted @ 2016-08-07 00:53 dongdone 阅读(762) 评论(0) 推荐(0) 编辑
摘要:Copy-On-write简称COW,是一种用于程序设计中的优化策略。 JDK里的COW容器有两种:CopyOnWriteArrayList和CopyOnWriteArraySet,COW容器非常有用,可以在非常多的并发场景中使用到。 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往 阅读全文
posted @ 2016-08-06 23:04 dongdone 阅读(262) 评论(0) 推荐(0) 编辑
摘要:ConcurrentMap接口下有两个重要的实现: ConcurrentHashMap ConcurrentSkipListMap(支持并发排序功能,弥补ConcurrentHashMap) ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的H 阅读全文
posted @ 2016-08-06 22:54 dongdone 阅读(1341) 评论(0) 推荐(0) 编辑
摘要:一、同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是Concurrent 阅读全文
posted @ 2016-08-01 22:37 dongdone 阅读(1422) 评论(0) 推荐(0) 编辑
摘要:要保证在多线程环境下的单例模式,有下面两种建议的方式: 一、静态内部类 二、double check的方式 阅读全文
posted @ 2016-08-01 22:00 dongdone 阅读(172) 评论(0) 推荐(0) 编辑
摘要:执行结果: 阅读全文
posted @ 2016-07-29 17:20 dongdone 阅读(245) 评论(0) 推荐(0) 编辑
摘要:使用wait、notify方法实现线程间的通信(注意这两个方法都是object的类的方法,换句话说java为所有的对象都提供了这两个方法) 1.wait和notify必须配合synchronized关键字使用 2.wait方法释放锁,notify方法不释放锁 示例1: 上述代码实现了这样的功能:t1 阅读全文
posted @ 2016-07-29 16:02 dongdone 阅读(660) 评论(0) 推荐(0) 编辑
摘要:(支持原创)本篇文章非原创,原文章地址: http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可 阅读全文
posted @ 2016-07-29 14:03 dongdone 阅读(360) 评论(0) 推荐(0) 编辑
摘要:先看下面的代码: 执行代码,会发现这个程序一直会运行,而不会停止。 因为在主线程中创建了rt对象,并且调用了run方法,启动了另一个线程,这个线程会复制isRunnning变量的副本到工作内存空间。 所以当主线程对rt对象的属性isRunning做了更改时,对其他线程而言是无效的,因为其他的线程都有 阅读全文
posted @ 2016-07-27 18:00 dongdone 阅读(211) 评论(0) 推荐(0) 编辑
摘要:一、改变了锁对象 本来打算让t1先执行,t1执行完成之后t2再执行,但是t1线程将锁对象改变了,所以可以说t1线程获取的是字符串“lock”的对象锁,t2线程获取的是字符串“change lock”的对象锁。 二、死锁问题 三、修改锁对象的属性 四、对象锁与类所 五、使用synchronized代码 阅读全文
posted @ 2016-07-27 15:58 dongdone 阅读(319) 评论(0) 推荐(1) 编辑
摘要:上面的两个例子比较简单,可以复制代码查看运行结果即可。 阅读全文
posted @ 2016-07-27 15:26 dongdone 阅读(571) 评论(0) 推荐(1) 编辑
摘要:上述的代码会发生脏读的问题,解决的办法是在setValue的方法上加synchronized关键字 读取和设置的数据必须保证是一致的。 这和数据库的一致性原理是一样的。 阅读全文
posted @ 2016-07-26 23:29 dongdone 阅读(286) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示