多线程
文章平均质量分 85
zhongxiangbo
这个作者很懒,什么都没留下…
展开
-
ThreadPoolExecutor线程池及线程扩展策略
一、概述 1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务; 2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。 3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。同时可以根据自己的需求实现自己的线程池原创 2017-04-28 08:28:28 · 4103 阅读 · 0 评论 -
ThreadPoolExecutor中BlockingQueue的三种实现及排队策略
1、ThreadPoolExecutor的构建参数 最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看注释和内部运转机制,想当然的揣测参数导致,先看一下新建一个ThreadPoolExecutor的构建参数:[java] view plaincopypublic Thre转载 2017-04-28 08:38:24 · 4424 阅读 · 1 评论 -
volatile深入分析( 什么时候使用volatile)
volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性。什么是线程的可见性:锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释转载 2017-04-28 14:51:46 · 842 阅读 · 0 评论 -
可重入锁和不可重入锁
一、锁的简单应用用lock来保证原子性(this.count++这段代码称为临界区)什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行。可通过CAS来实现原子操作CAS(Compare and Swap):CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。原创 2017-04-28 15:02:30 · 1100 阅读 · 0 评论 -
多线程之指令重排序
一、为什么会乱序现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执行”之前的阶段上。相反,流水线是并行的,多个指令可以同时处于同一个阶段,只要CPU内部相应的处理部件未被占转载 2017-05-01 08:42:40 · 818 阅读 · 0 评论 -
Java并发编程之CAS
CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。这听起来可能有一点复杂但是实际上你理解之后发现很简单,接下来,让我们跟深入的了解一下这项技术。CAS的使用场景在程序和算法中一个经常出现的模式就是“check an原创 2017-08-24 08:34:37 · 211 阅读 · 0 评论 -
并发编程中的ABA问题
什么是ABA问题转发地址:http://www.lantaozi.com/article/521b199f0ff2456b5b000001 ABA并不是一个缩写,更像是一个形象的描述。ABA问题出现在多线程或多进程计算环境中。该问题Wiki上有详细的介绍,本文将进行更通俗的演绎该问题。首先描述ABA。假设两个线程T1和T2访问同一个变量V,当T1访问变量V时,读取到V的值为A;此时...转载 2019-01-12 23:49:10 · 1710 阅读 · 1 评论