• ThreadLocal 与 Synchronized区别


    相同:ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。
    不同:Synchronized同步机制采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问;而ThreadLocal采用了“以空间换时间”的方式,每一个线程都提供了一份变量,因此可以同时访问而互不影响。

    以时间换空间->即枷锁方式,某个区域代码或变量只有一份节省了内存,但是会形成很多线程等待现象,因此浪费了时间而节省了空间。
    以空间换时间->为每一个线程提供一份变量,多开销一些内存,但是呢线程不用等待,可以一起执行而相互之间没有影响。

    小结:ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性。

     1 public class ConnectionUtil {
     2     private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
     3     private static Connection initConn = null;
     4     static {
     5         try {
     6             initConn = DriverManager.getConnection("url, name and password");
     7         } catch (SQLException e) {
     8             e.printStackTrace();
     9         }
    10     }
    11     
    12     public Connection getConn() {
    13         Connection c = tl.get();
    14         if(null == c) tl.set(initConn);
    15         return tl.get();
    16     }
    17 }
    View Code
    1 public class ConnectionUtil {
    2     private static DBOPool instance=null;
    3     public static synchronized Connection getInstance(){
    4         if(instance==null)
    5             instance=new DBOPool();
    6         return instance.getConnection();
    7     }          
    8 }
    View Code
  • 相关阅读:
    Java并发编程:volatile关键字解析
    多线程之指令重排序
    《paste命令》-linux命令五分钟系列之二十
    《cut命令》-linux命令五分钟系列之十九
    《ln命令》-linux命令五分钟系列之十八
    Clone Graph
    House Robber
    《wc》-linux命令五分钟系列之十七
    who am i
    《man男人》-linux命令五分钟系列之十五
  • 原文地址:https://www.cnblogs.com/xhyouyou/p/6932286.html
Copyright © 2020-2023  润新知