美文网首页线程
Java并发——核心理论

Java并发——核心理论

作者: 李牙刷儿 | 来源:发表于2017-07-25 20:54 被阅读14次

并发编程是Java程序员最核心的技能之一,同时也是掌握难度最大的一部分。我们都知道Java中提供了各种异步机制,但无论是notify waitsynchronizedvolatile亦或是java.util.conccurrent包下的ReentrantLockThreadPoolExecutor都遵循着相同的异步理论,要理解上述并发机制就必须首先了解Java异步的核心原理。

1 共享性

数据共享性是线程安全的主要原因之一。如果数据只在某一个线程中被访问则不存在共享性问题。然而在多线程环境下常常是多个线程共享一部分数据,为保证在多线程环境下共享数据的一致性,必须引入进程间的同步机制。

2 互斥性

资源互斥是指同时只允许一个访问者对其进行访问,具有唯一性和排它性。我们通常允许多个线程同时对数据进行读操作,但同一时间内只允许一个线程对数据进行写操作。所以我们通常将锁分为共享锁和排它锁,也叫做读锁和写锁。如果资源不具有互斥性,即使是共享资源,我们也不需要担心线程安全。例如,对于不可变的数据共享,所有线程都只能对其进行读操作,所以不用考虑线程安全问题。但是对共享数据的写操作,一般就需要保证互斥性。Java 中提供多种机制来保证互斥性,最简单的方式是使用Synchronized。

3 原子性

所谓原子性指的是一系列不可分割的,独立的操作,换句话说就是如果执行一个原子性操作,要么不执行,要么执行完该原子性操作,不会出现只做一半的情况。最底层的原子性操作是操作系统的指令。但Java层面的操作往往是由多个原子性操作构成的,要保证Java操作的原子性最常见的方式就是加锁,如Java中的Synchronized或Lock都可以实现,代码段二就是通过Synchronized实现的。除此之外还有一种方式是CAS(Compare And Swap):即修改数据之前先比较与之前读取到的值是否一致,如果一致,则进行修改,如果不一致则重新执行,这也是乐观锁的实现原理。

4 可见性

这里写图片描述

在多线程环境下,每一个线程都维护一个本地的工作内存,线程操作一个共享变量时并不是直接操作在主内存中的变量,而是将其先拷贝到自己工作内存后再就行修改,同时在修改完成后再同步到主内存。而所谓可见性就是当某一个线程改变某一共享变量后,另一线程可以感知到这一变化。Java中通过Synchronizedvolatile来保证可见性。

5 有序性

学过体系结构的朋友都知道,为了提高程序运行的效率,CPU会对指令进行重排序,以实现指令级并行。其实在现代操作系统中,除了指令级重排序外,编译器和内存系统也会进行相应的重排序以提升效率。

在单线程环境下,以上的重排序是不会改变程序的运行逻辑的。但是到了多线程环境,这样的重排序则可能导致逻辑错乱。Java中通过Synchronizedvolatile来保证顺序性。

相关文章

  • Java并发基础——核心篇

    Java并发基础之核心篇 上一期介绍了基础理论,让大家对并发有了基本的概念,这期也是并发理论的核心内容。 核心概念...

  • Java并发——核心理论

    摘要:并发编程是Java程序员最核心的技能之一,同时也是掌握难度最大的一部分。我们都知道Java中提供了各种异步机...

  • Java并发——核心理论

    并发编程是Java程序员最核心的技能之一,同时也是掌握难度最大的一部分。我们都知道Java中提供了各种异步机制,但...

  • Java并发编程-核心理论

    多线程编程经常会遇到很多问题,那么这些问题可能是由什么导致的呢? 数据存在共享 如果线程访问的都是只在线程里有效的...

  • 双11Java程序员书单推荐

    Java 《Java核心技术卷I》 《Java核心技术卷II》 《Java编程思想》 《Java并发编程实战》 《...

  • Java并发基础——理论篇

    Java并发基础之理论篇 很多朋友反馈说,对于没有Java并发基础就了解Java并发工具包,表示一脸茫然。那么从这...

  • 记录一些书籍

    JAVA 基础 《Java核心技术·卷1:基础知识》《Java核心技术 卷2:高级特性》《Java8 实战》 并发...

  • 线程

    Java 并发编程:线程池的使用 Java 并发编程:线程池的使用java 多线程核心技术梳理 (附源码) 本文对...

  • Java并发编程基础之并发包源码剖析(书籍目录)

    并发编程是Java编程的核心领域,而Java并发包则凝聚了并发编程的精华,掌握并发编程基础,熟练应用,理解思想则显...

  • 有追求的程序员书单

    Java经典进阶书籍 Effective Java Java编程思想 Java并发编程实战 Java核心技术卷一 ...

网友评论

    本文标题:Java并发——核心理论

    本文链接:https://www.haomeiwen.com/subject/pnygkxtx.html