LongAdder基础
摘要:LongAdder是JDK8中并发包中的一个新类,和AtomicLong都使用CAS,但是性能比AtomicLong更好。 LongAdder在AtomicLong的基础上进行了热点分离,热点分离类似于有锁操作中的减小锁粒度,将一个锁分离成若干个锁来提高性能。在无锁中,也可以用类似的方式来增加CAS
阅读全文
posted @
2016-02-23 22:08
lnlvinso
阅读(1680)
推荐(0) 编辑
利用回调实现Java的异步调用
摘要:异步是指调用发出后,调用者不会立刻得到结果,而是在调用发出后,被调用者通知调用者,或通过回调函数处理这个调用。 回调简单地说就是B中有一个A,这样A在调用B的某个方法时实际上是调用到了自己的方法。 利用回调可以实现Java的异步调用,下面的例子来自网上。 回调接口: public inte...
阅读全文
posted @
2015-09-01 23:59
lnlvinso
阅读(2338)
推荐(0) 编辑
Future模式
摘要:利用JDK提供的Future可以轻易的方法的完成同步非阻塞调用,类似于NIO中的管家,实现的也是同步非阻塞。public class FutureTaskTest { public static void main(String[] args) { ExecutorService es = E...
阅读全文
posted @
2015-08-31 23:17
lnlvinso
阅读(373)
推荐(0) 编辑
Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
摘要:Thread.stop, Thread.suspend, Thread.resume被标记为废弃的方法。在查看JDK的文档时,提到了下面的参考文章,先是英文版,接着是中文翻译。 Why is Thread.stop deprecated?Because it is inherently uns...
阅读全文
posted @
2015-08-31 22:40
lnlvinso
阅读(489)
推荐(0) 编辑
notify丢失、虚假唤醒
摘要:notify丢失: 假设线程A因为某种条件在条件队列中等待,同时线程B因为另外一种条件在同一个条件队列中等待,也就是说线程A/B都被同一个Object.wait()挂起,但是等待的条件不同。 现在假设线程B的线程被满足,线程C执行一个notify操作,此时JVM从Object.wait()的...
阅读全文
posted @
2015-08-23 23:33
lnlvinso
阅读(3637)
推荐(0) 编辑
java中的各种Queue
摘要:java中的各种并发Queue可以归为以下的几种: ConcurrentLinkedQueue: 一个由链表结构组成的非阻塞队列ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列PriorityBlo...
阅读全文
posted @
2015-08-23 18:25
lnlvinso
阅读(1046)
推荐(0) 编辑
关闭线程的一些问题
摘要:Thread.stop方法,虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,不应该使用stop方法来关闭Java的线程。 正确的方法应该是设置volatile boolean stop = false;,这样所有线程可以及时发现stop值的变化,线程运行的过程中周期性...
阅读全文
posted @
2015-08-17 23:32
lnlvinso
阅读(231)
推荐(0) 编辑
Exchanger
摘要:Exchanger可以在两个线程之间交换数据,只能是2个线程,不支持更多的线程之间互换数据。 当线程A调用Exchange对象的exchange()方法后,他会进入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行。 Exchanger...
阅读全文
posted @
2015-08-16 23:48
lnlvinso
阅读(250)
推荐(0) 编辑
ThreadLocal
摘要:ThreadLocalMap的定义是在ThreadLocal类中,真正的引用却是在Thread类中。 ThreadLocalMap中用于存储数据的entrystatic class Entry extends WeakReference { /** The value a...
阅读全文
posted @
2015-07-31 23:55
lnlvinso
阅读(289)
推荐(0) 编辑
CAS基础和原子类
摘要:基于CAS实现的AtomicInteger、 AtomicLong、 AtomicReference、 AtomicBoolean也被称为乐观锁。 CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”。当多个线程尝试使用CAS同时更新同一个变量...
阅读全文
posted @
2015-07-21 23:53
lnlvinso
阅读(931)
推荐(0) 编辑
Java锁概念基础
摘要:Java中的锁不管是Lock还是synchronized都可以分为互斥锁和非互斥锁。 互斥锁只能被一个线程持有,其他线程只能等待锁的释放。synchronized,ReentrantLock,ReadWriteReentrantLock的WriteLock是互斥的,但ReadLock不是互斥的...
阅读全文
posted @
2015-07-19 12:01
lnlvinso
阅读(500)
推荐(0) 编辑
生产者消费者模式
摘要:学习Java的多线程,生产者消费者模式是避免不了的。下面将以wait/notify,await/singal,blockingquene几种方式来实现生产者消费者模式。 下面的仅仅是例子,实际应用中应该使用Executor来完成,并且保证线程及线程池可以正常关闭。实际使用中需要考虑的情况是生产...
阅读全文
posted @
2015-07-18 17:40
lnlvinso
阅读(684)
推荐(0) 编辑
ThreadPoolExecutor
摘要:使用Java自带的线程池,一般都是如下的使用:ExecutorService exec = Executors.newCachedThreadPool(); //will create one thread for each task for(int i=0;i()); ...
阅读全文
posted @
2015-07-12 12:19
lnlvinso
阅读(1227)
推荐(0) 编辑
深入理解Java内存模型之系列篇[转]
摘要:原文链接:http://blog.csdn.net/ccit0519/article/details/11241403 深入理解Java内存模型(一)——基础 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)...
阅读全文
posted @
2015-07-05 22:39
lnlvinso
阅读(267)
推荐(0) 编辑
volatile
摘要:volatile 可以看做是一种轻量级的synchronized实现,volatile实现的仅仅是synchronized的部分功能,但是开销较synchronized小。特定的情形下,使用volatile会更为合适。 synchronized提供了两种主要特性:互斥 和可见性。互斥即同一...
阅读全文
posted @
2015-07-01 22:29
lnlvinso
阅读(259)
推荐(0) 编辑
Java多线程基础(二)
摘要:信号量Semaphore,类似于锁的功能,用于多线程中对一组资源的控制。 acquire方法用于尝试获取一个资源,未获取前将一直等待。release用于释放一个资源,release的前提是已经获得了一个资源。 package multiThread;import java.util.concu...
阅读全文
posted @
2015-06-10 22:50
lnlvinso
阅读(202)
推荐(0) 编辑
Java多线程基础(一)
摘要:一个简单的多线程的例子:package multiThread;public class BasicThread implements Runnable{ private int countDown = 10; private static int taskCount = ...
阅读全文
posted @
2015-05-31 22:47
lnlvinso
阅读(269)
推荐(0) 编辑