007 线程安全

一 .概述

  线程依赖于进程分配资源,因此线程对变量的操作就变得更加的简单,我们可能会使用不同的线程对同一个变量进行操作,这就可能代理线程的安全性问题.

  线程的安全性问题归根结底就是正确性问题,如果我们无法对变量进行原子性操作,那么变量就可能出现不一致的状态,因此我们的程序的结果就会出现问题.

  在java之中,提供了不同的多种方式对线程的安全性问题进行解决,回到根源就是原子性的保障.


二 . 原子性

  概念: 一个操作在完全结束之前是不可以被中断的,这个就是原子性的概念.

  问题 : 我们上面时候需要考虑原子性问题?

[1]多线程并发的情况下

[2]多线程共享变量

[3]对变量进行读写操作

上面的三个条件下,共享变量就会可能会出现不一致的状态.,在这种情况下我们就需要考虑原子性操作的问题.


三  .原子性的解决方案

  在java这种,最早出现的解决方案就是锁机制,我们可能最早接触的就是synchronized关键词,这个关键词帮助我们实现了一个可重入的独占锁.

  至于上面提到的可重入和独占锁的概念,会在后面进行分析.