面试官:聊聊Atomic原子类的实现原理
当我们谈论『线程安全』的时候,肯定都会想到 Atomic 类。不错,Atomic 相关类都是线程安全的,在讲 Atomic 类之前我想再聊聊『线程安全』这个概念。 线程安全真的是线程的安全吗?初看『线程安全』这几个字,很容易望文生义,这不就是线程的安全吗?其实不是,线程本身没有好坏,没有『安全的线程』和『不安全的线程』之分,俗话说:人之初性本善,线程天生也是纯洁善良的,真正让线程变坏是因为访问的变量的原因,变量对于操作系统来说其实就是内存块,所以绕了这么一大圈,线程安全称为『内存的安全』可能更为贴切。 简而言之,线程访问的内存决定了这个线程是否是安全的。 变量大致可以分为局部变量和共享变量,局部变量对于 JVM 来说是栈空间,大家都背过八股文,栈是线程私有的是非共享的,那自然也是内存安全的;共享变量对于 JVM 来说一般是存在于堆上,堆上的东西是所有线程共享的,如果不加任何限制自然是不安全的。 因为线程安全这个概念已经深入人心了,所以后面我们还是用线程安全来表达内存安全的含义。 那如何解决这种不安全呢?方法有很多,比如:加锁、Atomic 原子类等。 好了,咱们今天先来看看Atomic类。 什么是 Atomic?Java从JDK1.5开始提供java.util.concurrent.atomic包,这里包含了多个原子操作类。原子操作类提供了一个简单、高效、安全的方式去更新一个变量。 (编辑:ASP站长网) |