当前位置:首页 > 后端开发 > ThreadLocal 与 Synchronized区别

ThreadLocal 与 Synchronized区别

6个月前 (05-24)30

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

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

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

ThreadLocal 与 Synchronized区别 _ Java侠
 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
ThreadLocal 与 Synchronized区别 _ Java侠
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

 

作者:要好好吃饭
来源链接:https://www.cnblogs.com/xhyouyou/p/6932286.html

标签: synchronized

“ThreadLocal 与 Synchronized区别” 的相关文章

在静态方法和非静态方法上加 Synchronized的区别

Synchronzied 修饰非静态方法==》对象锁 Synchronzied 修饰静态方法==》其实是类锁,因为是静态方法,它把整个类锁起来了;  1.Synch...

synchronized总结

synchronized总结

synchronized基础用法 synchronized可以用于修饰类的实例方法、静态方法和代码块。它保护的是对象(包括类对象)而非代码,只要访问的是同一个对象的syn...

Java锁相关及synchronized关键字

Java锁相关及synchronized关键字

Java中锁的概念 自旋锁:为了不放弃CPU执行时间,循环的使用CAS技术对数据进行尝试更新,直至成功。 悲观锁:假定会发生并发冲突,同步所有共享数据的相关操作,从读书据就开...

synchronized(this)与synchronized(class)

本文转自:http://wangym.iteye.com/blog/1265973 RunnableTest.java: /** * */ package c...

Java Synchronized 关键字

本文内容 Synchronized 关键字 示例 Synchronized 方法 内部锁(Intrinsic Locks)和 Synchroniz...

线程安全、数据同步之 synchronized 与 Lock

线程安全、数据同步之 synchronized 与 Lock

本文Demo下载传送门 写在前面 本篇文章讲的东西都是Android开源网络框架NoHttp的核心点,当然线程、多线程、数据安全这是Java中就有的,为了运行快我们用一个Ja...

线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

接触过线程安全的同学想必都使用过synchronized这个关键字,在java同步代码快中,synchronized的使用方式无非有两个: 通过对一个对象进...

synchronized内置锁的介绍

synchronized内置锁的介绍

  重要的网址 1. https://www.cnblogs.com/charlesblc/p/5994162.html synchronize...

Java并发编程实战(使用synchronized实现同步方法)

    本文介绍java最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问,如果一个对象已用synchronized关键字声明,那么只有一个执行线程...

java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解

java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解

一、JMM(java memory model)内存模型 从网上淘来二张图: 上面这张图说的是,在多核CPU的系统中,每个核CPU自带高速缓存,然...