1、单线程的环境一定是线程安全的
为什么说多线程环境不安全:
因为进程的资源是对线程来说是共享的,一旦多个线程并发的处理了同一个资源,必然会出现不一致,即资源互斥。
而单线程环境下就是线程安全的,它总只有一个线程在执行。
1.1实现线程安全的方式
一 通过加锁的方式保证资源每一刻只有一个线程在处理,(synchronized和ReentranLock等)
二 给线程也拥有自己的资源
java线程副本–ThreadLocal
线程局部副本ThreadLocal之正解
ps:记得看两大误区,非常重要,切记ThreadLocal并不是底层实现是一个Map,key是当前线程,value是局部变量。而是Thread 对象中各自维护着一个ThreadLocal.ThreadLocalMap 对象,此Map对象是线程私有的,key是ThreadLocal对象,value是线程的局部变量。而ThreadLocal中没有维护着Map对象
2 synchronized代码块不可重入
3 ReentranLock是一个可重入的Lock锁类,需要主动释放锁。
3.1 lock()和tryLock()的区别
lock一直等待锁,
tryLock()不等待,可以设置等待一段时间lock.tryLock(2,TimeUnit.SECONDS),返回的是一个boolean值