zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    求随机数平均值方法 求随机数方差方法 求正态分布的随机数
    combox 绑定
    winform界面textbox框 鼠标经过时出现浮动
    Regex
    C# 3.0 一行求方差
    通过Linq 实现DataTable Group By
    ORACLE 时间运算
    发布几个国外的XHTML模板站,DIV+CSS模板下载
    C# 3.0新特性系列:隐含类型var
    在NTier 或多层应用程序中使用ADO.NET Entity Framework
  • 原文地址:https://www.cnblogs.com/xhyouyou/p/6932286.html
Copyright © 2011-2022 走看看