重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
线程安全:
创新互联网络公司拥有10余年的成都网站开发建设经验,1000+客户的共同信赖。提供成都做网站、成都网站制作、成都外贸网站建设、网站开发、网站定制、卖友情链接、建网站、网站搭建、自适应网站建设、网页设计师打造企业风格,提供周到的售前咨询和贴心的售后服务当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么就称这个类时线程安全的。
线程安全主要体现在以下三个方面:
原子性:提供了互斥访问,同一时刻只能有一个线程对它进行操作
可见性:一个线程对主内存的修改可以及时的被其他线程观察到
有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序
引子
在多线程的场景中,我们需要保证数据安全,就会考虑同步的方案,通常会使用synchronized或者lock来处理,使用了synchronized意味着内核态的一次切换。这是一个很重的操作。
有没有一种方式,可以比较便利的实现一些简单的数据同步,比如计数器等等。concurrent包下的atomic提供我们这么一种轻量级的数据同步的选择。
使用例子
import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; public class App { public static void main(String[] args) throws Exception { CountDownLatch countDownLatch = new CountDownLatch(100); AtomicInteger atomicInteger = new AtomicInteger(0); for (int i = 0; i < 100; i++) { new Thread() { @Override public void run() { atomicInteger.getAndIncrement(); countDownLatch.countDown(); } }.start(); } countDownLatch.await(); System.out.println(atomicInteger.get()); } }