除了性能改进之外,何时应该更喜欢ThreadLocal而不是同步?

时间:2016-03-22 15:04:35

标签: java multithreading thread-local

除了性能改进之外,何时应该优先ThreadLocal超过同步?请用现实生活中的例子来解释。

4 个答案:

答案 0 :(得分:1)

ThreadLocal不能替代synchronizedThreadLocal解决的主要问题是如何管理应用程序中的每个线程static数据。

static是你应该尽量避免的事情:这是一个不可测试的脆弱代码的配方。

答案 1 :(得分:0)

使用线程的唯一原因是出于性能原因(或者您可能喜欢混淆;)。

AFAICS如果您对性能进行折扣,则没有理由使用Threads,ThreadLocal或同步。

答案 2 :(得分:0)

ThreadLocal在Thread中提供全局变量访问。当您希望跨方法共享变量并仍保留Thread范围时,这将有所帮助。

J2EE应用程序服务器使用ThreadLocal跟踪事务,安全上下文而不传递

答案 3 :(得分:0)

当你使用ThreadLocal变量时,线程只能使用它来查看和操作它们,没有其他线程可以看到它们。线程局部变量在线程执行时也会死亡。 在使用线程池时,应该小心使用ThreadLocal变量。

ThreadLocal变量放在一个名为Thread private stack的特殊内存空间中。

共享变量放在堆内存空间中,它们在所有线程之间共享,它们是同步还是不同步。

所以它更多是关于用例而不是性能。

可以使用ThreadLocal变量来保持与某些DB的连接,其中连接仅与当前线程相关联,并且不需要其他线程来查看它并且需要同步它。例如,缓存 - 例如内存映射或列表中的共享在服务器应用程序中的所有线程之间共享,并且必须同步。