ThreadLocal和synchronized的区别

ThreadLocal和Synchonized都用于解决多线程并发访问。但是ThreadLocal与synchronized有本质的区别:

  • synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。从始至终,只存在一个资源,然后多个线程都去访问,那么就得排队,依次访问。

    缺点:效率低,得排队

  • 而ThreadLocal可以部分解决synchronized排队问题,为每一个线程都提供了变量的副本,牺牲内存,提升效率

    缺点:,使得每个线程在某一时间访问到的并不是同一个对象,这样就违背了多个线程对数据的数据共享,因此,需要在一定的场景下才能使用,即允许备份的存在;反之,如果不允许备份,就不能使用。

    ThreadLocal并不能替代synchronized:举个不恰当的例子,夫妻离婚,有个儿子,抚养权划给其中一个人,那么夫妻只能轮流探视,你没办法复制一个儿子出来,让双方都有一个儿子!

参考

ThreadLocal和synchronized的区别

你可能感兴趣的:(Java,ThreadLocal,synchronized,区别,联系)