java如何实现线程安全
线程安全就是要保证数据的高度一致性和准确性,但不是一定要加锁才是线程安全性,只要代码里没有变量互串,线程之间互不影响,就是线程安全的,那么java如何实现线程安全?下面我们一起来了解一下。
网络安全小知识:
(1)互斥同步:
互斥是因,同步是果,推荐使用synchronized关键字进行同步,在concurrent包中有ReentrantLock类,实现效果差不多.还是推荐原生态的synchronized.
(2)非阻塞同步:
需要硬件指令完成.常用的指令有:
Test-and-Set
Fetch-and-Increment
Swap
Compare-and-Swap(CAS)
Load-Linked/Store-Conditional(LL/SC)
典型的应用在AtomicInteger中
(3)无同步方案
可重入代码:在代码执行的任何时刻中断它,转而去执行另外一段代码,而在控制权返回后,原来的程序不会出现任何错误.
可重入代码有一些共同的特性:例如不以来存储在堆上的数据和公用的系统资源,用到的状态量都由参数中传入,不调用非可重入的方法等.
线程本地存储:如果一段代码中所需要的数据必须与其他代码共享,那就看看这些共享数据的代码是否能保证在统一线程中执行?如果能保证,可以把共享数据的可见范围限制在同一个线程中,这样,无需同步也能保证线程之间不出现数据争用问题.在java中可以通过使用java.lang.ThreadLocal开实现线程本地存储的功能.
这种应用在人人网的开源框架Rose有广泛的应用,最经典的应用在获取当前登录用户对象的时候,是通过t票到cache中来拿到当前登录用户的user对象.对象就保存在ThreadLocal中.经典的web交互模型中"一个请求对应一个服务器线程"的处理方式,把user对象保存在线程本地存储中可以很好的解决线程安全的问题。
提醒您:实施网络安全防范措施与应用措施是必须要做的,这样才能保障在网络中的安全。最后大家想要了解更多网络安全常识和网络安全技术可在本网站了解。