`

多线程基础概念

 
阅读更多
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 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    多线程基础与基于多线程的简单聊天室

    本压缩包“多线程基础与基于多线程的简单聊天室”提供了对多线程技术的实践理解和二次开发的基础。以下是关于这个主题的详细知识点: 1. **多线程的概念**:多线程是指在一个程序中同时执行多个不同的线程,每个...

    多线程使用原因以及例程

    根据给定的文件标题“多线程使用原因以及例程”,本文将围绕多线程的基本概念、使用原因、关键技术和实际应用等方面进行深入探讨。 #### 二、多线程的核心概念 1. **多线程定义**:多线程是指在单个进程中同时运行...

    多线程原来是这么简单

    #### 二、多线程基础概念 **1. 什么是多线程?** 多线程是指程序在执行时能够同时运行多个线程,这些线程共享同一进程的资源,每个线程执行不同的任务。相比于单线程程序,多线程能够提高程序的响应性和效率,特别...

    多线程控制

    #### 一、多线程基本概念与原理 多线程是计算机编程中的一个核心概念,它允许在一个程序中同时执行多个任务或子任务,从而提高程序的效率和响应性。在按键精灵(AutoIt)这样的自动化脚本工具中,多线程的应用尤为...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。以下是这些实例可能涉及的关键知识点: 1. **线程创建**:C#中创建线程主要有两种方式,一是通过`System.Threading.Thread`...

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

    C# 多线程讲解的基础概念 多线程开发的基础知识点包括:创建线程、线程池、同步和异步、WinForm 多线程编程、线程安全、锁定机制等。 一、创建线程 创建线程有多种方式,包括使用 Thread 类、Delegate....

    C#多线程系列教程.pdf

    #### 一、多线程基础概念 - **线程与进程**:在计算机科学中,进程是程序的一次执行过程,而线程则是进程中可独立调度和执行的基本单位。每个进程至少包含一个线程。 - **线程的优势**:线程比进程更轻量级,创建和...

    北大Java--多线程

    1. **多线程基本概念**: - 线程是一个程序内部的顺序控制流,它没有独立的执行,必须依附于程序。在Java中,线程由`java.lang.Thread`类表示。 - 相比进程,线程在同一个程序内共享内存空间和资源,拥有更小的...

    多线程单例模式并发访问

    #### 一、多线程基础概念 在讨论多线程单例模式及并发访问之前,我们先来了解一些基本概念。 **进程**和**线程**是计算机科学中的两个核心概念,它们之间的关系紧密而复杂。 - **进程**:具有独立功能的程序在某个...

    VB.net多线程技术知识

    本文将详细阐述多线程的基本概念、在VB.net中的应用以及相关的高级特性。 #### 多线程基本概念 多线程是指在一个程序中同时执行多个线程的能力,每个线程都可以独立地执行代码路径。这使得程序可以在不同任务之间...

    多线程编程一个简单示例轻松入门

    #### 多线程基础概念 在计算机科学中,**多线程**是一种让单个程序执行多个任务的技术。每个任务被称为一个“线程”,它们可以并行地执行,从而提高程序的效率和响应性。多线程技术广泛应用于各种操作系统和应用...

    Linux下C语言多线程编程实例

    Linux 下 C 语言多线程编程实例 Linux 下的多线程编程是一种非常重要的技术,在...本实例提供了一个非常实用的多线程编程示例,帮助我们更好地理解多线程编程的基本概念和技术,并且可以作为实际应用的参考和借鉴。

    Intel多核多线程编程基础(windows)

    ### 多线程基本概念 多线程是一种软件技术,允许一个程序在同一时间执行多个任务或线程。在多核处理器环境中,这种技术尤为重要,因为它可以充分利用硬件资源,提高程序的并行性和响应速度。 ### 多核编程基础 ##...

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

    总的来说,多线程基础编程涵盖了从基本概念到实际应用的广泛内容,理解并掌握这些知识点对于编写高效、稳定的并发程序至关重要。通过思维导图的方式,我们可以更好地组织和记忆这些复杂的概念,以便在实践中灵活运用...

    多线程相关

    一、多线程基本概念 1. 线程:线程是操作系统调度的基本单位,每个线程都有自己的程序计数器、系统栈和局部变量,但共享同一块内存空间,这使得线程间的通信更为便捷。 2. 并发与并行:并发是指在同一时间段内执行多...

    多线程、网络编程重点

    #### 一、多线程基础概念 在计算机科学领域,多线程是程序设计中的一个重要概念。一个进程可以包含多个线程,每个线程都是进程的一个执行路径。多线程技术允许在一个程序中同时执行多个任务,从而提高程序的运行...

    C#多线程互斥实例 多线程获取同一变量

    首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统分配CPU时间的基本单位,每个线程都有自己的执行路径,它们可以并行或交替执行。 2. **共享资源**:在多线程环境中,多个线程可能需要...

Global site tag (gtag.js) - Google Analytics