美文网首页
Java并发和并行:(二)

Java并发和并行:(二)

作者: iwtbam | 来源:发表于2020-01-31 23:38 被阅读0次
    1. 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;
        }
    }
    
    1. 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;
        }
    }
    
    1. 线程池
      线程池的优点。
      • 降低资源的消耗
      • 提高效应的速度
      • 提高线程的可管理性

    相关文章

      网友评论

          本文标题:Java并发和并行:(二)

          本文链接:https://www.haomeiwen.com/subject/ozrnthtx.html