Java并发编程实战
文章平均质量分 68
My_Vina
不被金钱,他人和过去所打扰.
展开
-
Java线程的Interrupt方法与InterruptedException解析
线程阻塞状态与等待状态(当一个线程处于被阻塞或等待状态时,它暂时不活动,不允许任何代码且消耗最少的资源) 当一个线程试图获得一个内部的对象锁(而不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态 当一个线程等待另一个线程通知调度器的一个条件时,它自己进入等待状态。在调用Object.wait方法或Thread.join方法,或者是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况。实..原创 2020-05-29 10:07:01 · 483 阅读 · 0 评论 -
java中Unsafe类的“特殊”用法
最近在学习java.util.concurrent包的内容时,发现了一个java中很强大的工具类Unsafe,不仅提供了很强大的功能,如:操纵对象属性 操纵数组元素 线程挂起与恢复、CAS还发现了一些很“特殊”的用法。public native Object allocateInstance(Class<?> var1) throws InstantiationException;该方法可以通过Class对象构造一个对象实例。我们平时都是隐式(java反射)和显式地通过类原创 2020-05-27 19:19:43 · 331 阅读 · 0 评论 -
Java并发编程实战(学习笔记 第十二至十六章)
十二至十六章笔记转载 2018-06-09 09:15:08 · 143 阅读 · 0 评论 -
闭锁初尝试
以下为一个简单的闭锁的应用:package JavaDay6_02;import java.util.concurrent.CountDownLatch;/** * @author myvina@qq.com * @date 18-6-2 上午8:55 *///在计时测试中使用闭锁来启动和停止线程public class Demo1 { public long...原创 2018-06-02 09:41:35 · 200 阅读 · 0 评论 -
【Java并发编程】闭锁
(转自:https://www.cnblogs.com/xujian2014/p/5359684.html#_label5 侵删)1、什么是闭锁? 闭锁(latch)是一种Synchronizer(Synchronizer:是一个对象,它根据本身的状态调节线程的控制流。常见类型的Synchronizer包括信号量、关卡和闭锁)。 闭锁可以延迟线程的进度直到线程线程到达终止状态。一个闭锁工作起来...转载 2018-06-02 09:43:30 · 358 阅读 · 0 评论 -
FutureTask初尝试
以下为一个使用FutureTask进行模拟预加载的代码:package JavaDay6_02;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @author myvi...原创 2018-06-02 10:07:46 · 116 阅读 · 0 评论 -
Java进阶之FutureTask的用法及解析
(转自:https://blog.csdn.net/chenliguan/article/details/54345993 侵删)1 FutureTask概念FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成...转载 2018-06-02 10:14:24 · 251 阅读 · 0 评论 -
Java中的信号量
利用Java中的信号量可以将任何一种容器变成有界阻塞容器,如下例子:package JavaDay6_02;import java.util.Collections;import java.util.HashSet;import java.util.Set;import java.util.concurrent.Semaphore;/** * @author myvina@...原创 2018-06-02 10:28:28 · 2042 阅读 · 0 评论 -
Java中的信号量Semaphore
(转自:https://blog.csdn.net/zlp1992/article/details/52703793 侵删)java提供了一个类Semaphore来实现信号量,概念上讲,一个信号量相当于持有一些许可(permits),线程可以调用Semaphore对象的acquire()方法获取一个许可,调用release()来归还一个许可1 构造方法: Semaphore有两个构造方法 Sema...转载 2018-06-02 10:30:33 · 104 阅读 · 0 评论 -
栅栏(CyclicBarrier)初尝试
以下是栅栏的一个简单例子:package JavaDay6_02;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * @author myvina@qq.com * @date 18-6-2 上午10:33 */public ...原创 2018-06-02 11:07:56 · 149 阅读 · 0 评论 -
【Java并发编程】关卡
(转自:http://www.cnblogs.com/xujian2014/p/5363759.html 侵删)一、什么是关卡? 关卡类似于闭锁,它们都能阻塞一组线程,直到某些事件发生。 关卡和闭锁关键的不同在于,所有线程必须同时到达关卡点,才能继续处理。闭锁等待的是事件,关卡等待的是其他线程。回到顶部二、CyclicBarrier CyclicBarrier 的字面意思是可循环使用(Cyc...转载 2018-06-02 11:09:35 · 319 阅读 · 0 评论 -
5.6 构建高效且可伸缩的结果缓存
首先,声明一个计算接口:package JavaDay6_02.Demo5;/** * @author myvina@qq.com * @date 18-6-2 下午12:15 */public interface Computable<K, V> { V compute(K arg) throws InterruptedException;}一种实现类如下:...原创 2018-06-02 13:11:21 · 240 阅读 · 0 评论 -
5.4 阻塞方法与中断方法
(待完成,先初步了解,近一个月慢慢写相应文章)原创 2018-06-01 21:30:14 · 159 阅读 · 0 评论 -
5.3 阻塞队列和生产者-消费者模式
(待完成,先初步了解,近一个月慢慢写相应文章)5.3.1 示例:桌面搜索5.3.2 串行线程封闭5.3.3双端队列和工作密取原创 2018-06-01 21:29:19 · 172 阅读 · 0 评论 -
6.2 Executor框架
(转自:https://www.cnblogs.com/MOBIN/p/5436482.html 侵删)摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务的线程相当于消费者,并用Runnable来表示任务,Executor的实现还...转载 2018-06-03 15:50:04 · 113 阅读 · 0 评论 -
java并发编程之CompletionService
(转自:https://blog.csdn.net/u010185262/article/details/56017175 侵删)应用场景当向Executor提交多个任务并且希望获得它们在完成之后的结果,如果用FutureTask,可以循环获取task,并调用get方法去获取task执行结果,但是如果task还未完成,获取结果的线程将阻塞直到task完成,由于不知道哪个task优先执行完毕,使用这...转载 2018-06-03 15:49:50 · 128 阅读 · 0 评论 -
Java并发编程实战(学习笔记 第七至十一章)
七至十一章笔记转载 2018-06-03 22:20:46 · 142 阅读 · 0 评论 -
5.5 同步工具类
(待完成,先初步了解,近一个月慢慢写相应文章)5.5.1 闭锁5.5.2 FutureTask5.5.3 信号量5.5.4 栅栏原创 2018-06-01 20:34:08 · 104 阅读 · 0 评论 -
5.6 构建高效且可伸缩的结果缓存
(待完成,先初步了解,近一个月慢慢写相应文章)原创 2018-06-01 20:50:37 · 150 阅读 · 0 评论 -
Java并发编程实战第一部分(基础部分)小结
1、可变状态是至关重要的。 所有的并发问题都可以归结为如何协调对并发状态的访问。可变状态越少,就越容易确保线程安全性、2、尽可能将域声明为final类型,除非需要它们是可变的。3、不可变对象一定是线程安全的。 不可变对象能极大地降低并发编程的复杂性。它们更为简单而且安全,可以任意共享而无须使用加锁或保护复制等机制。4、封装有助于管理复杂性。 在编写线程安全的程序时,虽然可以将所有...原创 2018-06-01 21:02:20 · 184 阅读 · 0 评论 -
Java并发编程实战(学习笔记 —— 第二章 线程安全性)
(转自:https://blog.csdn.net/ahaha413525642/article/details/76546489 侵删)2.1 线程安全性(Thread Safety)要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问。‘共享’意味着可以被多个线程同时访问,而’可变’意味着变量的值在其生命周期内可以发生变化...转载 2018-06-01 21:09:59 · 259 阅读 · 0 评论 -
Java并发编程实战(学习笔记二 第三章 对象的共享)
(转自:https://blog.csdn.net/ahaha413525642/article/details/76574351 侵删)本章将介绍如何共享和发布对象,从而使它们嫩能够安全地由多个线程同时访问。3.1 可见性(Visibility)通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至不可能。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。下面的 N...转载 2018-06-01 21:15:21 · 738 阅读 · 0 评论 -
Java并发编程实战(学习笔记三 第四章 对象的组合)
(转自:https://blog.csdn.net/ahaha413525642/article/details/76617019 侵删)4.1 设计线程安全的类在设计线程安全类的过程中,需要包含下面三个基本要素 ①找出构成对象状态的所有量 ②找出约束状态变量的不变性条件 ③建立对象状态的并发访问管理策略要访问对象的状态,首先从对象的域开始。如果对象中所有的域都是基本类型的变量,那么这些域将构成对...转载 2018-06-01 21:21:27 · 259 阅读 · 0 评论 -
5.1 同步容器类
(待完成,先初步了解,近一个月慢慢写相应文章)5.1.1 同步容器类的问题5.1.2 迭代器和ConcurrentModificationException5.1.3 隐藏迭代器原创 2018-06-01 21:25:53 · 239 阅读 · 0 评论 -
5.2 并发容器
(待完成,先初步了解,近一个月慢慢写相应文章)5.2.1 ConcurrentHashMap5.2.2额外的原子Map操作5.2.3 CopyOnWriteArrayList原创 2018-06-01 21:27:22 · 83 阅读 · 0 评论 -
Java并发编程实战(学习笔记五 第六章 任务执行)
点击打开链接转载 2018-06-02 17:22:06 · 133 阅读 · 0 评论