先举个例子,ThreadLocal是啥呢?在一个线程的情况下,threadlocal就相当于一个仓库,很简单,就是一个保存值的局部变量,通过set get 方法来从这个仓库中存储和获取。 但是在多个线程的情况下,就很不一样了,threadlocal就变成了孙悟空,对,你没看错,变成了孙悟空,为啥是孙悟空呢?因为孙悟空会分身术,会将自己变成多个孙悟空,而且变出来的每个孙悟空都各自具有各自的思想,是完全独立的,这个多个孙悟空之间不存在任何的联系。有多少个线程就有多少个孙悟空,每个线程里的孙悟空虽然名字都叫做孙悟空,但是他们之间没有任何的联系!!!
代码演示
此时content局部变量还没有用到threadlocal
则打印的结果可能会发生错乱,如下图所示
再次打印,结果就不会发生错乱了
重点来啦
synchronized是只有一份资源,多个人抢着来用,因此加锁,排队!比如多个人要去上厕所,但只有一个坑,因此每次只能一个人去上