J.U.C
文章平均质量分 74
Tian_Ex
这个作者很懒,什么都没留下…
展开
-
生产者消费者模式
生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系。比如一个人正在准备食物(生产者),而另一个人正在吃(消费者),他们使用一个共用的桌子用于放置盘子和取走盘子,生产者准备食物,如果桌子上已经满了就等待,消费者(那个吃的)等待如果桌子空了的话。这里桌子就是一个共享的对象。在Java Executor框架自身实现了生产者消费者模式它们分别负责添加和执行任务。 生产者消费者模式的优点原创 2016-01-10 16:01:18 · 440 阅读 · 0 评论 -
Executor和ExecutorService
Executor Executor用来执行已提交的Runnable任务,该接口将任务的提交与具体执行进行了解耦。它通常用来代替显示地创建线程,例如: Executor executor = anExecutor; executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2());原创 2016-01-16 21:04:54 · 353 阅读 · 0 评论 -
ThreadLocal详解
ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程的上下文。 ThreadLocal的设计初衷是,提供线程内部的局部变量,在本线程内随时随地可取,隔离其他线程。 ThreadLocal基本操原创 2016-01-16 23:51:36 · 392 阅读 · 0 评论 -
非阻塞算法
在基于锁的算法中可能会由于线程在持有锁或者内存页缺失导致I/O阻塞,从而引发活跃性问题。而在非阻塞算法中,一个线程的失败不会导致其他线程也失败或挂起。通常我们会使用CAS来协调各个线程之间的操作,无竞争的CAS总能执行成功,并且如果有多个线程竞争同一个CAS,那么总会有一个线程在竞争中胜出并执行下去。 创建非阻塞算法的关键在于,要找出如何将原子修改的范围缩小到单个变量上,同时还要维护数据的一致性原创 2016-03-30 10:37:52 · 724 阅读 · 0 评论 -
Future
Future用来表示线程异步执行的结果,它提供了用于检查异步执行是否已经执行完毕、是否已经被取消,并且获取执行结果的方法。当执行完毕后,结果仅仅只能通过get方法获取,如果还没完毕则阻塞直到它准备好。 基本操作 cancel方法 cancel方法用来取消一个正在异步执行的任务,如果任务还没有开始,则该任务将不会再被执行,如果任务已经在执行,则可以通过mayInterruptIfR原创 2016-01-10 16:10:17 · 408 阅读 · 0 评论 -
ConcurrentHashMap解析(JDK8)
在JDK8中,ConcurrentHashMap实现机制较JDK7发生了很大变化,其摒弃了分段锁(Segment)的概念,而是利用CAS算法,与Hashtable一样,内部由“数组+链表+红黑树”的方式实现。同时又增加了许多辅助类,例如TreeBin,以实现并发性。 构造函数 构造器中有3个参数,分别是initialCapacity,loadFactor,concurr原创 2016-01-11 17:23:22 · 2178 阅读 · 1 评论 -
Java内存模型
假设有一个线程为变量 aVariable 赋值: aVariable = 10; 内存模型需要解决的问题是:在什么条件下,读取 aVariable 的线程将看到这个新值。通常而言,如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到另一个线程的操作结果:在编译器中生成的指令顺序,可以与源代码中的顺序不同;编译器可能会把变量保存在寄存器而不是内存中;处理器可以采取乱序或并行等方式来执行指原创 2016-02-12 20:09:53 · 348 阅读 · 0 评论 -
AbstractQueuedSynchronizer(AQS)
概述 AQS提供了实现阻塞锁和相关依赖于FIFO等待队列的同步器(semaphore,events等)的框架;这个类设计成用来构建依赖于单个原子int值去代表状态的同步器;其子类必须定义改变状态的protected方法;这个类的其它方法用来实现入队列和阻塞机制;子类可以持有其它状态域,但是仅仅使用getState,setState以及compareAndSetState方法原子更新int值。子类原创 2016-02-11 15:29:14 · 397 阅读 · 0 评论 -
Java阻塞队列
阻塞队列(BlockingQueue)是指一个这样的一个Queue,它支持两个额外的操作: 当队列为空时,获取元素的线程会一直阻塞等待直到队列变为非空;当队列已满时,添加元素的线程会一直阻塞等待直到队列有可用空间; 阻塞队列常用于生产者消费者模式。 阻塞队列提供了四种不同的形式操作方法: JDK提供了7个阻塞队列,分别是: ArrayBlockingQueue原创 2016-01-11 11:53:05 · 294 阅读 · 0 评论 -
Java线程池
线程池的关闭 我们可以通过调用线程池的shutdown方法或者shutdownNow方法来关闭线程池,其原理是遍历线程池中的所有工作线程,然后逐个调用线程的interrupt方法来中断线程。这也就意味着无法响应中断的线程可能就无法终止。 shutdown方法按顺序中断之前已提交的任务,同时拒绝接收新的任务。这个方法不会等待之前已提交任务执行完成,可通过调用awaitTermin原创 2016-06-03 18:45:27 · 481 阅读 · 0 评论