![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发与高并发
dawn_rainy
路漫漫其修远兮,吾将上下而求索
展开
-
控制一段代码只执行一次
package com.example.concurrency.atomic;import com.example.concurrency.annoations.ThreadSafe;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.ut...原创 2019-08-30 10:32:16 · 2880 阅读 · 0 评论 -
线程安全性------有序性
Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程中不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。常用关键字 volatile synchronized lock,来保证有序性happens-before原则1)程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作1)锁定规则:一个unlock操作先行...原创 2019-08-30 14:35:01 · 145 阅读 · 0 评论 -
安全发布对象--发布与逸出
发布对象:使一个对象能够被当前范围之外的代码所使用对象逸出: 一种错误的发布。当一个对象还没有构造完成时,就使它被其它线程可见@NotThreadSafepublic class UnsafePublish { private String[] states = {"a","b","c"}; public String[] getStates(){ r...原创 2019-08-30 15:03:42 · 105 阅读 · 0 评论 -
安全发布对象-----单例模式
1)在静态初始化函数中初始化一个对象引用2)将对象的引用保存到volatile类型或者AtomicReference对象中3)将对象的引用保存到某个正确构造对象的final类型域中4)将对象的引用保存到一个由锁保护的域中1、memory = allocate()分配对象的内存空间2、ctorInstance()初始化对象3、instance=memory设置in...原创 2019-08-30 15:36:48 · 110 阅读 · 0 评论 -
不可变对象
不可变对象需要满足的条件:对象创建以后其状态就不能修必对象所有域都是final类型对象是正确创建的(在对象创建期间,this引用没有逸出)1)final关键字:类,方法,变量修饰类:不能被继承修饰方法:1、锁定方法不被继承类修改 2、效率修饰变量:基本数据类型变量、引用类型变量package com.example.concurrency.immu...原创 2019-09-02 15:18:41 · 184 阅读 · 1 评论 -
线程不安全类->线程安全的类->并发容器J.U.C
先检查再执行,必须保证原子性 :if(condition(a)){ handle(a);}StringBuilder ->StringBufferSimpleDateFormat -> JodaTimeArrayList,HashSet,HashMap等CollectionsArrayList -> Vector,StackHashMap -> H...原创 2019-09-06 17:24:37 · 210 阅读 · 0 评论