ThreadLocal与synchronized锁(线程同步)的区别

目录标题

    • 一、ThreadLocal与同步锁
    • 二、作用不同、不可替代
    • 三、参考

一、ThreadLocal与同步锁

  1. 对于多线程资源共享的问题,同步机制(锁)采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响

  2. 同步机制利用所实现资源的同步访问,确保某一个时刻只有一个线程在访问资源;而ThreadLoca则规避了同步,让每一个线程有自己的一份副本。

二、作用不同、不可替代

他们之间不能彼此替代,只是从不同的角度去解决线程访问资源的问题。threadLocal无法替代锁实现的资源共享,而锁也做不到可以提供给独立的线程实例资源。比如,在秒杀场景下,对于库存这个共享变量,只能使用锁的同步机制实现线程安全。库存数对每个线程都会产生影响,线程之间需要通讯(通过库存进行通讯,判断还有没有库存)。而ThreadLocal的作用是让每个线程备份一次(也就是大家初始值一样)共享资源,后面就各自使用自己的备份变量,相互之间不产生联系(影响),没有沟通。ThreadLocal应用场景SimpleDateFormat

三、参考

ThreadLocal和同步锁机制的对比分析

你可能感兴趣的:(java,java,多线程,ThreadLocal)