Java多线程问题
麦片粥
放浪形骸之外
展开
-
Java多线程(二)之安全发布对象
发布对象 发布对象:使一个对象能够被当前范围之外的代码所使用; 对象逸出:一种错误的发布,当一个对象还没有构造完成时,就被其他对象所见。安全发布对象 在静态初始化函数中初始化一个对象引用; 将对象的引用保存到volatile类型域或者AtomicReference对象中; 将对象的引用保存...原创 2018-11-23 16:36:18 · 143 阅读 · 0 评论 -
Java多线程(一)之Java线程安全性
定义: 当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么这个类是线程安全的。线程安全三要素:1、原子性:提供互斥访问,同一时刻只能有一个线程对它进行操作;2、可见性:一个线程对主内存的修改可以及时的被其他线程观察到;3、有序性:即程序的执行顺序按照代码的先后...原创 2018-11-23 16:24:38 · 126 阅读 · 0 评论 -
Java多线程(三)之不可变对象
只要发布了,没有发生对象逸出的,就是线程安全的。不可变对象需满足的条件: 对象创建以后其状态就不能修改; 对象所有域都是final类型; 对象正确创建(对象创建期间,this引用没有发生逸出) 不可变对象是线程安全的,因为不可修改;将不会修改的对象,设计成不可修改的类对象,让对象在多个线程间线程安全。 创建不可变对象的方法:final关键字:修饰类:不能被继承,e...原创 2018-11-26 18:34:29 · 198 阅读 · 0 评论 -
Java多线程(四)之线程封闭
线程封闭:将对象封装到一个线程里;线程封闭的方式:ad-hoc线程封闭:程序控制,最糟糕,忽悠; 堆栈封闭:局部变量、无并发问题(全局的变量,容易引发线程安全问题) TreadLocal线程封闭:特别好的封闭方法。 我们平时写的代码,没有线程安全问题,是因为堆栈封闭的原因。TreadLocal的使用: 1、创建requestHolderpackage com.liuhy...原创 2018-11-26 18:50:09 · 243 阅读 · 0 评论 -
Java多线程(五)之线程不安全类及写法
常见的线程不安全类: StringBuilder:线程不安全,效率高; StringBuffer:线程安全,使用synchronized做了处理,效率较builder低; 在一个方法内部,定义局部变量使用,属于堆栈封闭,只有单个线程可以操作这个变量,不涉及线程安全问题。也就是说,在方法内部使用的话StringBuilder和StringBuffer都是线程安全的,建...原创 2018-11-27 18:31:42 · 888 阅读 · 0 评论 -
Java多线程(六)同步容器
同步容器:ArrayList--->Vector,StackHashMap--->HashTable(key,value不能为null)Collections.synchronizedXXX(List、Set、Map)同步容器并不是所有的场合都是线程安全的。例如:package com.liuhy.test.testapplication.syncContai...原创 2018-12-03 12:02:55 · 111 阅读 · 0 评论 -
Java多线程(七)并发容器
ArrayList------>CopyOnWriteArrayListHashSet------>CopyOnWriteArraySet; TreeSet---->ConcurrentSkipListSetHashMap----->ConcurrentHashMap; TreeMap----->ConcurrentSkipListMap为啥使用Con...原创 2018-12-03 18:02:47 · 101 阅读 · 0 评论