ThreadLocal与Synchronized】的更多相关文章

概述 最近在看<ThinKing In Java>,看到多线程章节时觉得有一些概念比较容易混淆有必要总结一下,虽然都不是新的东西,不过还是蛮重要,很基本的,在开发或阅读源码中经常会遇到,在这里就简单的做个总结. 1.volatile volatile主要是用来在多线程中同步变量. 在一般情况下,为了提升性能,每个线程在运行时都会将主内存中的变量保存一份在自己的内存中作为变量副本,但是这样就很容易出现多个线程中保存的副本变量不一致,或与主内存的中的变量值不一致的情况.而当一个变量被volatil…
ThreadLocal是什么? 历史 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 定义 ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”.其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些. 我们可以这样理解:把一个线程比喻…
多线程在自动化测试中用的不多,也就是说我们用单线程可以完成大部分的自动化测试脚本. 主要有两个原因,首先是因为自动化测试首要考虑的是脚本的稳定性,所以一般会牺牲效率以保证脚本稳定,其次是由于局限于我们自动化测试工程师的开发功底. 如果我们想提升测试效率,同时也提升自己的脚本开发水平,还有需要处理一些单线程处理不了的需求,那就可以考虑使用多线程了. 我们在自动化测试中有哪些场景可以用到多线程呢? 1. 处理大量的数据,比如同时从多个数据库读取数据.(可以使用单线程实现) 2. 在一台工作机上并行运…
一.Thread API: setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 首先要了解什么是Thread.UncaughtExceptionHandler,默认来说当线程出现未捕获的异常时,会中断并抛出异常,抛出后的动作只有简单的堆栈输出.如: public class ThreadTest{ public static void main(String[] args) throws Exception…
并发都用到, 两个都是解决了线程并发问题,区别呢? Synchronized  同步机制, 共有变量被多个线程使用,会出现线程不安全,所以,加锁,锁机制很多种,例如Synchronized, lock 锁, 阻塞队列.以时间换空间, 某一个线程拿到锁, 先进去, 其他线程, 等着吧~ ThreadLocal ,当多个线程使用一个对象, 以空间换时间, 创建不同的变量副本.大家不要抢, 每个人都有!首先这个对象是全局变量. ThreadLocal 保证了线程的隔离性 ,一个经典的例子是 Simpl…
ThreadLocal和Synchonized都用于解决多线程并发访问他们两者的区别:synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问,而ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享,而Synchronized却正好相反,它用于在多个线程间通信时能够获得数据共享.一句话来说,Synchronized是为了让多线程进行数据共享,而ThreadLocal为了让多线程进行数据…
相同:ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题.不同:Synchronized同步机制采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问:而ThreadLocal采用了“以空间换时间”的方式,每一个线程都提供了一份变量,因此可以同时访问而互不影响. 以时间换空间->即枷锁方式,某个区域代码或变量只有一份节省了内存,但是会形成很多线程等待现象,因此浪费了时间而节省了空间.以空间换时间->为每一个线程提供一份变量,多开销一些内存,但是呢线程不用…
package com.demo; import org.hibernate.HibernateException; import org.hibernate.classic.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public final class HibernateUtil { private static SessionFactory sessionFact…
ThreadLocal ThreadLocal主要是为了解决内存泄漏的问题,它是一种弱引用: 引用总共有四种,,我简单列一下: 强引用(Strong Reference):正常引用,根据垃圾回收算法,当这个引用存在时,就无法对引用对象进行 GC(如果根可达的话) 软引用(Soft Reference):能够获取到引用对象,当发生 FGC 时,堆内存不够时,软引用会回收引用对象,应用在缓存等. 弱引用(Weak Reference):能够获取到引用对象,当发生 GC 时,会回收引用对象,应用在 T…
线程的共享 synchronized  +  volatile + ThreadLocal <1> synchronized 锁住的是对象,当用它来锁住一个类时,实际上也是锁的一个对象. 用了synchronized 就没必要用 volatile, 对于 synchronized 锁住的对象. <2>最轻量的同步机制 volatile: 特性:只保证可见性. 如定义一个static变量,在主线程中改变了它,分线程不能感知到主线程修改了它. 适用场景:大量读,少量写. <3&g…