Java并发和并行:(二)
2020-01-31 本文已影响0人
iwtbam
- volatile 关键字
- 保证内存可见
- 防止指令重排
- 不保证原子性
volatile 应用,双重检查单例模式
public class SingleInstance {
private static volatile SingleInstance instance;
public SingleInstance getInstance() {
if(instance==null){
synchronized(SingleInstance.class){
if(instance==null)
return new SingleInstance();
}
}
return instance;
}
}
- ThreadLocal
ThreadLocal 可以让每个访问这个变量的线程的都用一个自己的副本。
每个线程的内部都含有一个ThreadLocalMap, 记录每个ThreadLocal 变量对应的值。
public class Thread implements Runnable {
...
ThreadLocal.ThreadLocalMap threadLocals = null;
...
}
ThreadLocal 的 get 和 set 是现获取的对应的线程的ThreadLocalMap , 然后对齐的本地ThreadLocal对应值进行操作。
class ThreadLocal<T> {
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}
}
- 线程池
线程池的优点。- 降低资源的消耗
- 提高效应的速度
- 提高线程的可管理性