java多线程解说
结合系统原理和源码实现,多维度解说juc包的使用,并提供参考案例,为java多线程开发保驾护航。
xinzun
终不似,少年游
展开
-
java多线程解说【拾玖】_ThreadLocal总结
突然发现之前总结的知识没有覆盖到ThreadLocal,这里续上一文是为补充。首先说说什么是ThreadLocal。看名字感觉像是本地线程之意,其实不然。ThreadLocal其实是Thread的一个本地化对象,相当于线程访问其持有对象的代理,各个线程可通过它创建并访问各自的自有对象。说白了就是,线程可以创建自己的ThreadLocal保存想要保存的对象,实现跨越接口拿到保存的对象。原创 2018-03-29 11:36:00 · 248 阅读 · 0 评论 -
java多线程解说【拾伍】_并发工具类:CountDownLatch
上篇文章:java多线程解说【拾肆】_线程池从JDK5开始,java为我们的多线程开发提供了多种并发工具,最常用的是如下三个:1.CountDownLatch2.CyclicBarrier3.Semaphore本文先介绍一下CountDownLatch:CountDownLatchCountDownLatch可以在如下原创 2018-02-26 16:28:56 · 266 阅读 · 0 评论 -
java多线程解说【拾陆】_并发工具类:CyclicBarrier
上篇文章:java多线程解说【拾伍】_并发工具类:CountDownLatch上文中我们介绍了CountDownLatch的使用,而且知道CountDownLatch是不支持重复使用的。那么如果我们想重复使用,就需要用到下面要介绍的CyclicBarrier了。CyclicBarrier顾名思义,CyclicBarrier的意思就是循环(Cyclic)屏障(原创 2018-02-26 16:53:54 · 198 阅读 · 0 评论 -
java多线程解说【拾柒】_并发工具类:Semaphore
上篇文章:java多线程解说【拾陆】_并发工具类:CyclicBarrier本文介绍一下最后一个并发工具类Semaphore。SemaphoreSemaphore(信号量)是用来控制同时访问特定资源的线程数量,通过协调各个线程以保证合理的使用公共资源。它同样通过设置一个数字,当请求的数量达到指定的数字时,就将请求拦截;直到有线程释放了资源后,则放原创 2018-02-26 17:07:42 · 267 阅读 · 0 评论 -
java多线程解说【拾捌】_锁的总结
java多线程解说【壹】_什么是线程java多线程解说【贰】_java内存模型java多线程解说【叁】_Thread的常用API实现java多线程解说【肆】_锁实现:wait()/notify()java多线程解说【伍】_锁实现:ReentrantLock的实现java多线程解说【陆】_锁实现:Condition的实现java多线程解说【柒】_锁实现原创 2018-02-26 23:32:40 · 417 阅读 · 0 评论 -
java多线程解说【拾壹】_并发容器
上篇文章:java多线程解说【拾】_12个原子操作类上文中我们介绍了juc包中的12个原子操作类,本文我们了解一下juc包中的并发容器。在JDK5后,java为我们提供了9个线程安全的并发容器,包括常用的HashMap、List和LinkedQueue等数据模型。下面选几个常用的容器进行下介绍ConcurrentHashMap在多线程场景原创 2018-02-26 00:37:06 · 265 阅读 · 0 评论 -
java多线程解说【拾贰】_并发框架:Fork/Join
上篇文章:java多线程解说【拾壹】_并发容器上文我们介绍了多线程编程中常用的并发容器,下面说一下多线程中常用的并发框架,主要有:1.Fork/Join;2.FutureTask本文先说说Join/Fork框架Fork/Join模式Fork/Join框架是JDK7开始提供的用于并行还行任务的框架,原理就是把一个大任务拆分成若干个小原创 2018-02-26 01:07:25 · 249 阅读 · 0 评论 -
java多线程解说【拾叁】_并发框架:Future
上篇文章:java多线程解说【拾贰】_并发框架:Fork/Join上篇文章我们介绍了并发框架中Fork/Join框架,本文继续介绍下Future框架。Future框架Future框架的核心是可以异步地执行一个任务,让主线程可以先去处理其他业务逻辑,而充分利用计算机资源。主要包括FutureTask类,它实现了Future接口和Runnable接口,也就是说它既可原创 2018-02-26 10:32:03 · 305 阅读 · 0 评论 -
java多线程解说【拾肆】_线程池
在多线程编程的实际开发中,我们势必会需要启动多个线程来处理多个任务。因为线程的创建和销毁需要一定的性能开销,如果每次执行一个任务都创建一个新线程来执行,那么将消耗大量的计算资源。所以我们需要一个线程池的概念,让使用过的线程可以回收再使用,避免重复创建带来的性能消耗。下面说一下juc包中为我们提供的线程池实现:Executor框架juc包中用ThreadPoolExe原创 2018-02-26 15:10:48 · 274 阅读 · 0 评论 -
java多线程解说【壹】_什么是线程
这是新的系列的一篇文章。争取好好写。争取这个星期边复习边写,可以写完这个系列。这个系列就是java多线程。进程和线程这两个名词从字面上看相当容易混淆,感觉都是程字辈的。实则不然。如果对其概念加以了解,那么区分开来就相当容易。进程就是程序运行的实例,可以认为是正在进行的程序。而线程则是进程中可以独立执行的最小单位,线程要完成的计算称为任务。举个例子原创 2018-01-22 16:17:45 · 356 阅读 · 0 评论 -
java多线程解说【贰】_java内存模型
上文:java多线程解说【壹】_什么是线程上篇文章说到,在多线程下如果我们要保证原子性、有序性和可见性,那么我们就要采取一些措施来实现。首先就有一个问题,为什么在多线程下和单线程下的情况不同呢,因为这涉及到线程间通信。线程间通信的方式无非两种,一种是共享内存,一种是消息传递。可能都知道java是通过第一种方式实现的线程通信,那么具体是如何实现的呢,这就要从java内存模型说起。原创 2018-01-24 15:08:19 · 342 阅读 · 0 评论 -
java多线程解说【叁】_Thread的常用API实现
上篇文章:java多线程解说【贰】_java内存模型在上文中我们分析了java内存模型和volatile、synchronized的实现原理。在这篇文章中,我们继续分析一下Thread的常用api有哪些,以及它们是如何实现的。Thread的结构我们先通过源码看看Thread中主要封装了哪些对象:private char name[]原创 2018-01-25 15:17:42 · 612 阅读 · 0 评论 -
java多线程解说【肆】_锁实现:wait()/notify()
上篇文章:java多线程解说【叁】_Thread的常用API实现上文中介绍了Thread的API,那么在多线程编程中,最常遇到的一个问题就是线程之间相互竞争而引起运行结果与预期不符,这个问题也称为竞态条件。为了避免这个问题的发生,我们需要在资源竞争的时候引入锁的概念。在java语言多线程编程中常用的锁方式有以下几种:1.Object的wait()/notify();原创 2018-02-02 16:43:28 · 350 阅读 · 0 评论 -
java多线程解说【伍】_锁实现:ReentrantLock的实现
上篇文章: java多线程解说【肆】_锁实现:wait()/notify()通过上文我们得知,使用Object的wait()/notify()在释放锁激活其他线程的时候,不能指定激活只能随机激活,而我们实际开发场景中可能需要去指定激活某个阻塞的线程,那么怎么办呢?别急,uc包(java.util.concurrent)下为我们提供了灵另外一种锁实现,这就是Lock/Cond原创 2018-02-05 22:48:03 · 493 阅读 · 0 评论 -
java多线程解说【陆】_锁实现:Condition的实现
上篇文章:java多线程解说【伍】_锁实现:ReentrantLock的实现上文中我们分析了ReentrantLock的底层如何通过AQS来实现锁的申请和释放的,以及公平锁、非公平锁的区别。那么在ReentrantLock的锁机制中,还支持一种基于条件锁的实现,这就是Condition。那么这个Condition的底层是如何实现的呢,下面我们尝试进行分析。Conditi原创 2018-02-06 11:22:25 · 590 阅读 · 0 评论 -
java多线程解说【柒】_锁实现:Lock/Condition的例子
java多线程解说【伍】_锁实现:ReentrantLock的实现java多线程解说【陆】_锁实现:Condition的实现前两篇文章中我们分析了Reentrantlock和Condition的实现,从中我们知道,它们都是基于队列的先进先出机制,通过构建节点排队的方式完成的调度。这里还有一个问题,就是当一个节点尝试去修改公共的变量值的时候,如何保证这个修改操作的原子性和一致性,这就原创 2018-02-06 12:46:30 · 504 阅读 · 0 评论 -
java多线程解说【捌】_锁实现:读写锁ReentrantReadWriterLock
前面的文章介绍了几种锁的实现:java多线程解说【肆】_锁实现:wait()/notify()java多线程解说【伍】_锁实现:ReentrantLock的实现java多线程解说【陆】_锁实现:Condition的实现这几种锁都是排他锁,也就是说同一时刻只允许一个线程进行访问,而对其他线程的不论什么操作都会阻塞,这样当在读写场景下性能和并发性是不太友好的原创 2018-02-23 14:51:44 · 372 阅读 · 0 评论 -
java多线程解说【玖】_锁实现:LockSupport工具类
前面的文章介绍了几种锁的实现:java多线程解说【肆】_锁实现:wait()/notify()java多线程解说【伍】_锁实现:ReentrantLock的实现java多线程解说【陆】_锁实现:Condition的实现java多线程解说【捌】_锁实现:读写锁ReentrantReadWriterLock本篇文章再介绍另一个LockSupport工具类。原创 2018-02-23 16:31:17 · 330 阅读 · 0 评论 -
java多线程解说【拾】_12个原子操作类
多线程的知识还真是不少,之前的文章只是说完了关于锁的一系列实现,回观整个juc包,至少还包括下面几个方面:并发容器(各种线程安全的集合类);并发框架(Fork/Join);原子操作类(各种Atomic类);并发工具类(3个经典类);线程池(Excutor);慢慢总结吧,这篇文章先说一下原子操作类。atomic包从JDK5开始,ja原创 2018-02-24 10:58:23 · 374 阅读 · 0 评论