
java并发编程
hust-dou
这个作者很懒,什么都没留下…
展开
-
Timer与TimerTask的真正原理&使用介绍
其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样:[java] view plain copyprint?Timer timer = new Timer(); timer.schedule(new TimerTask() { publ转载 2017-11-07 15:17:12 · 272 阅读 · 0 评论 -
java锁的理解
import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;/** * 原子操作:不可被打断的一些列操作,32位多处理器主要通过对总线和缓存加锁保证原子性。 * 首先要保证原子性,需要处理器对于数据的处理要保证原子性,当一个处理器读取内原创 2017-11-02 10:19:43 · 270 阅读 · 0 评论 -
java原子变量的理解
package main.javaConcurrencyInPractice.ifeve;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicIntegerArray;import java.util.concurrent.atomic.AtomicI原创 2017-11-02 14:47:47 · 219 阅读 · 0 评论 -
深入研究 Java Synchronize 和 Lock 的区别与用法
在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 我们先从最简单的入手,逐步分析这2种的区别。 一、synchronized和lock的用法区别 synchronized:在需要同步的对象中加入此控制,synchronized转载 2017-11-02 14:57:04 · 214 阅读 · 0 评论 -
synchronized关键字与lock的使用举例。
/** * synchronized 基于阻塞的方法,通过唤醒等待的线程,需要进行上下文切换,当有很多线程阻塞获取锁的时候,会引起线程频繁的上下文切换。 * Lock通过CAS循环等待的机制,乐观的假设去获取锁,获取失败继续循环获取锁,可能需要无限消耗CPU。 * 当代码逻辑很复杂时,需要1 , 用到锁的中断功能时。 2 , 需要考虑等待队列中的公平性。 3, 需要定向通知某个线程,通原创 2017-11-02 15:34:01 · 240 阅读 · 0 评论 -
并发学习路线
volatile、synchronized关键字(阻塞的方式)->ReentrantLock 、 ReentrantReadWriteLock(CAS实现锁,AQS的思想实现)->线程安全的集合( 非阻塞的集合类、阻塞的队列)->线程池的使用。ReentrantLock 、 ReentrantReadWriteLock: 通过与condition一起使用,增加多线程之间的交互性。(AQS实现思原创 2017-11-02 16:41:42 · 305 阅读 · 0 评论 -
reentrantLock源码分析
import java.util.concurrent.locks.ReentrantLock;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.LockSupport;/** * reentrantLock 内部类,Sync extends abstra原创 2017-11-03 11:00:17 · 156 阅读 · 0 评论 -
java concurrent的学习
一次聊天,谈到了死锁的解决、可重入锁等等,突然发现这些离自己很远,只有一些读书时的概念涌入脑海,但各自的应用场景怎么都无法想出。痛定思痛,决定看看concurrent包里涉及并发的类及各自的应用场景。第一类:原子操作类的atomic包,里面包含了1)布尔类型的AtomicBoolean2)整型AtomicInteger、AtomicIntegerArray、AtomicIntegerF转载 2017-11-03 11:38:10 · 241 阅读 · 0 评论 -
java AIO示例
AIO是异步IO的缩写,虽然NIO在网络操作中,提供了非阻塞的方法,但是NIO的IO行为还是同步的。对于NIO来说,我们的业务线程是在IO操作准备好时,得到通知,接着就由这个线程自行进行IO操作,IO操作本身是同步的。但是对AIO来说,则更加进了一步,它不是在IO准备好时再通知线程,而是在IO操作已经完成后,再给线程发出通知。因此AIO是不会阻塞的,此时我们的业务逻辑将变成一个回调函数,等待I转载 2017-11-04 20:07:49 · 452 阅读 · 0 评论 -
DelayQueue应用举例
import java.util.Iterator;import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.concurrent.DelayQueue;import java.util.concurrent.Delayed;import java.util.concu原创 2017-11-05 17:19:49 · 415 阅读 · 0 评论 -
Java中线程池ThreadPoolExecutor原理探究
一、 前言线程池主要解决两个问题:一方面当执行大量异步任务时候线程池能够提供较好的性能,这是因为使用线程池可以使每个任务的调用开销减少(因为线程池线程是可复用的)。另一方面线程池提供了一种资源限制和管理的手段,比如当执行一系列任务时候对线程的管理,每个ThreadPoolExecutor也保留了一些基本的统计数据,比如当前线程池完成的任务数目。另外,线程池提供许多可调参数和可扩转载 2017-11-07 09:36:28 · 209 阅读 · 0 评论