
并发
文章平均质量分 77
千念飞羽
这个作者很懒,什么都没留下…
展开
-
日常小结-happens-before的个人理解
happens-before的个人理解最近看java并发方面的资料,刚看的时候被happens-before的概念给唬住了。。在看几天有了一些粗浅体会,现在先写下啦日后在整理。产生的原因首先java本身有一个java内存模型的概念。在此之上有一个更加抽象的概念内存一致性模型,而在此之下有一个更加底层的概念就是编译器和处理的实现模型。这三者都有自己的定义。我只从简略的角度尝试解释一下。内存一致性模型原创 2016-10-26 15:50:59 · 870 阅读 · 0 评论 -
netty的IM项目小结
关于netty的主要用途的理解,netty的线程模型和IO模型高效的理解。关于自己一个个人小IM项目的介绍和反思。原创 2017-02-27 22:22:16 · 15051 阅读 · 5 评论 -
日常小结-经典IPC问题实现
基本原理来自《现代操作系统》我用java给重写了一边。多线程经验不多,有问题多指教。生产者消费者问题有一点需要特别注意一下,如果只有一个生产者一个消费者可以使用notify。如果有多个生产者和消费者则需要使用notifyall否则会产生死锁。 这里使用wait和notify方法实现也可以使用其他方式。日后或许会在补充。package ipc;import java.util.Random;pub原创 2016-10-23 16:08:55 · 1369 阅读 · 0 评论 -
源码分析-ThreadPoolExecutor
接口首先说一下几个Executor相关的接口Executor:这个接口的主要功能的使是的策略与机制的分离,主要就是可以将提交任务的线程和执行任务的线程分开,异步的进行。当然特殊情况下也是同步进行的。只有一个方法就是void execute(Runnable command)ExecutorService:这个接口功能就要复杂一些了,和Excutor的区别主要在两点: 提供了取消和原创 2017-02-13 14:39:53 · 643 阅读 · 0 评论 -
源码分析-ConcurrentHashMap
一个支持并发的提取和修改的散列表。这个类和hashtable准守相同的规范,并且每个版本都对应相同的功能规范。虽然这是一个线程安全的类,但是他并不依赖于一个整体的锁,没有一个锁可以锁住整个元素而静止所有访问。这个类和hashtable可以互操作。提取操作如get。不会阻塞,所以有可能被更新方法锁覆盖,提取反映了最近完全操作的结果。对于聚合操作如果putAll和clea原创 2017-01-18 15:05:02 · 826 阅读 · 0 评论 -
源码分析-CopyOnWriteArrayList
概述doc文档一个线程安全的ArrayList对于所有的可变操作都使用一个基于数组的新拷贝实现。 通常的情况下这样做的代价非常大,但是当遍历操作远远大于修改操作的时候这样做更有效率,或者当你不希望使用同步的方式遍历操作同时又希望可以排除并发干扰的时候也很有效。快照类型的迭代器使用给指向当迭代器创建的时候当前数组状态的引用。这个数组在整个迭代器的生命周期中都不变,所以同步干扰不会出现,而原创 2017-01-13 20:46:35 · 443 阅读 · 0 评论 -
源码分析-SynchronousQueue
SynchronousQueueSynchronousQueue作为阻塞队列的时候,对于每一个take的线程会阻塞直到有一个put的线程放入元素为止,反之亦然。在SynchronousQueue内部没有任何存放元素的能力。所以类似peek操作或者迭代器操作也是无效的,元素只能通过put类操作或者take类操作才有效。通常队列的第一个元素是当前第一个等待的线程。如果没有线程阻塞在该队列则poll会返回null。从Co原创 2017-01-05 21:18:42 · 3771 阅读 · 2 评论 -
日常小结-在内部类中必须使用Atomic原子类替换volatile类
最近在看《java并发编程实战》的时候,发现了一些缺乏的知识点,这里做一下整理。这里强力推荐下这本书。向匿名内部类传递的参数必须是final类型的在第七章取消与关闭的时候,看到了程序清单7-20的时候有个注解 之所以采用AtomicBoolean来代替volatile类型的boolean,是因为能从内部的Runnable中访问hasNewMail标志,因此它必须是final类型以免修改。之前在原创 2016-11-25 15:00:53 · 1803 阅读 · 1 评论 -
日常小结-while多线程改变判断条件时的异常情况
昨天写程序遇到一个坑,花了很久才找到是为什么。以往程序出错主要还是自身原因,这算是第一个类似bug的存在。这做下记录。本来是希望写一个检测标志位的程序,因为耗时很短,我就简单的写了个while循环去检测。结果程序在调试状态下很好的运行,但是直接运行就不行。后来发现while循环似乎做了一些优化。如果while后面不加任何语句而直接以分号结尾,则程序检测一段时间后就不在继续检测了(类似挂起,但具体是不原创 2016-11-01 15:43:53 · 1514 阅读 · 0 评论 -
日常小结-多线程的单例模式的三种实现方式
多线程单例模式在很多并发的书里面都有写。单例模式的分类饿汉模式:类初始化的时候就进行创建单例模式 懒汉模式:在调用getinstance方法的时候才创建单例;懒汉模式的问题在多线程的情况下可能会有多个线程同时调用getinstance这样会导致创建多个实例。解决方案synchronizedsynchronized方法来同步方法或者整个getinstance。 当然是有效的只是效率比较低。 需要原创 2016-10-25 16:28:53 · 3030 阅读 · 1 评论 -
日常小结-java线程状态的转移
JAVA线程的状态Thread.State和虚拟机状态之间异同。首先JAVA的线程状态,其定义可以从Thread.State的定义中看出NEW:初始状态 RUNNABLE:运行状态 BLOCKED:阻塞状态 WAITING/WAIT_WAITING:等待其他线程执行相应操作后运行 TERMINATED:终止状态但是这里还是有一个比较著名的图(图片来源),如下: 我基本上是这样理解的Thre原创 2017-03-10 16:28:57 · 900 阅读 · 0 评论