new_JUC
高进123
每天进步一点点
展开
-
volatile之内存可见性
1.内存可见性(Memory Visibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。 2.可见性错误是指当读操作与写操作在不同的线程中执行时,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。 3.我们可以通过同步来保证对象被安全地发布。除此之外我们也可以使原创 2017-09-23 22:40:34 · 285 阅读 · 0 评论 -
多线程“锁”要点
一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法 锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法 加个普通方法后发现和同步锁无关 换成两个对象后,不是原创 2017-10-01 21:41:31 · 418 阅读 · 0 评论 -
读-写锁ReadWriteLock
ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有writer,读取锁可以由多个reader 线程同时保持。写入锁是独占的。 ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性可以原创 2017-10-01 21:37:10 · 398 阅读 · 0 评论 -
Condition 控制线程通信
Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个Lock 可能与多个Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的Object 版本中的不同。 在Condition 对象中,与wait、notify 和notifyAll 方法对应的原创 2017-10-01 21:33:15 · 1183 阅读 · 0 评论 -
显示锁Lock
用于解决多线程安全的方式: synchronized:隐式锁 1. 同步代码块 2. 同步方法 jdk 1.5 后: 3. 同步锁 Lock(是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁) 一般为了养成良好的习惯,编写代码是上锁和放锁一起写,且为了保证放锁的代码一定能执行到,将放锁的代码置于finally中。以下为一段卖票的示例程原创 2017-10-01 21:27:39 · 380 阅读 · 0 评论 -
多线程创建方式三之实现Callable接口
Callable 接口 Java 5.0 在java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口 Callable 接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable 不会返回结果,并且无法抛出经过检查的异常。 Callable 需要依赖FutureTask ,FutureTask 也可以用原创 2017-09-24 18:57:45 · 395 阅读 · 0 评论 -
闭锁机制
CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行: 确保某个计算在其需要的所有资源都被初始化之后才继续执行; 确保某个服务在其依赖的所有其他服务都已经启动之后才启动; 等待直到某个操作所有参与者都准备就绪再继续执行原创 2017-09-24 14:57:13 · 889 阅读 · 0 评论 -
锁分段机制
Java 5.0 在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。 ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于HashMap 与Hashtable 之间。内部采用“锁分段”机制替代Hashtable 的独占锁。进而提高性能。 此包还提供了设计用于多线程上下文中的原创 2017-09-24 14:21:29 · 1225 阅读 · 0 评论 -
模拟CAS算法
/* * 模拟 CAS 算法 */public class TestCompareAndSwap { public static void main(String[] args) { final CompareAndSwap cas = new CompareAndSwap(); for (int i = 0; i < 10; i++) {原创 2017-09-24 14:06:50 · 442 阅读 · 0 评论 -
原子变量CAS算法
一、CAS算法 1、CAS (Compare-And-Swap) 是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。 2、CAS 是一种无锁的非阻塞算法的实现。 3、CAS 包含了3 个操作数: 3.1、需要读写的内存值V 3.2、进行比较的值A 3.3、拟写入的新值B 3.4、当且仅当V原创 2017-09-24 11:31:55 · 814 阅读 · 0 评论 -
线程池
第四种获取线程的方法:线程池,一个ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用Executors 工厂方法配置。 线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个ThreadPoolExecutor 还维护着一些基本的统计数据原创 2017-10-01 21:47:26 · 414 阅读 · 0 评论