`

多线程基础概念

 
阅读更多
Java 内存模型中的可见性、原子性和有序性。

可见性 :
是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。
在 Java 中 volatile、synchronized 和 final 实现可见性。


原子性:
原子是世界上的最小单位,具有不可分割性。
比如 a=0;(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作。再比如:a++; 这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。AtomicInteger、AtomicLong、AtomicReference并发包的类提供了原子操作API。
在 Java 中 synchronized 和在 lock、unlock 中操作保证原子性。


有序性:
多个线程的执行顺序,是重排序的。比如,主线程定义了2个变量a=0,b=0;线程 A,将执行 a=2,b=1;B线程将执行while(a=2){b=3},这是可能b线程a的值不确定。Java 语言提供了 volatile 和 synchronized 两个关键字来保证线程之间操作的有序性。

安全发布的常用模式:
在静态初始化函数中初始化一个对象引用
将对象的应用保存到volatile类型的域或者AtomicReferance对象中
将对象的引用保存到某个正确构造对象的final类型域中
将对象的引用保存到一个由锁保护的域中。

与volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:
在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。

与Volatile 有相似作用,不过Final主要用于不可变变量(基本数据类型和非基本数据类型),进行安全的发布(初始化)。而Volatile可以用于安全的发布不可变变量,也可以提供可变变量的可见性。
分享到:
评论

相关推荐

    计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi

    计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    C# 多线程讲解的基础概念

    多线程开发的基础。包括windForm多线程,同步异步与消息队列,线程池

    Python程序设计:多线程爬虫.pptx

    多线程爬虫有道翻译 知识点:多线程爬虫的编写 进程与线程概念 进程 操作系统像是一个奇怪的工厂,因为工人人数有限,每次只能支持一个车间开工。开工运转的车间就是进程,它是操作系统资源调度的单位。 进程与线程...

    10分钟入门多线程-思维导图

    描述多线程基础概念,在计算机中的资源使用,以及C#编程中涉及到的Thread类、线程池等相关概念 重点融合了多线程的使用场景相关知识,能够在短时间能让阅读者从入门到精通

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南...本书以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。

    1分钟看懂CPU多发射超标量/多线程/多核概念的区别

    本文介绍CPU多发射超标量/多线程/多核概念的区别,来一起学习下吧。

    POSIX多线程程序设计.pdf

    本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有...

    多线程基础设计

    在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行...

    多线程基础个人总结思维导图

    包括进程、线程概念;同步函数、同步代码块;多线程安全问题:售票问题;单例设计模式;死锁

    5.7_2_硬件多线程的基本概念.abc

    5.7_2_硬件多线程的基本概念.abc

    .NET多线程编程(1):多任务和多线程

    首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述。NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作...

    C# 多线程教材

    C#多线程教材 入门 概述与概念 创建和开始使用多线程 线程同步基础 同步要领 锁和线程安全 Interrupt 和 Abort 线程状态 等待句柄 同步环境 使用多线程 单元模式和Windows Forms BackgroundWorker类 ...

    java基本教程之多线程基本概念 java多线程教程

    多线程是Java中不可避免的一个重要主体。下面是对“JDK中新增JUC包”之前的Java多线程内容的讲解,JUC包是由Java大师Doug Lea完成并在JDK1.5版本添加到Java中的

    Java多线程编程技术

    《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将...

    java多线程编程实战指南 核心篇 代码

    《Java多线程编程实战指南(核心篇)》以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及...

    python多线程.rar

    python多线程基本概念,使用互斥锁同步线程,死锁和可重入锁,条件变量同步, 队列同步,线程间通信, 线程的合并和后台线程。

    POSIX多线程程序设计

    本, 书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了, 一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问, 题,并给出了避免错误和提高性能等问题...

Global site tag (gtag.js) - Google Analytics