zz学习笔记 zz学习笔记
首页
  • Java基础

    • Java基础
    • Java容器
  • JAVA进阶

    • JVM虚拟机
    • JAVA并发编程
  • MySQL数据库

    • MySQL基本使用
    • InnoDB引擎
  • Redis数据库

    • Redis基本使用
    • Redis原理
关于
  • 分类
  • 标签
  • 归档

zz

学习中
首页
  • Java基础

    • Java基础
    • Java容器
  • JAVA进阶

    • JVM虚拟机
    • JAVA并发编程
  • MySQL数据库

    • MySQL基本使用
    • InnoDB引擎
  • Redis数据库

    • Redis基本使用
    • Redis原理
关于
  • 分类
  • 标签
  • 归档
  • Java基础

  • Java进阶

    • JAVA并发编程
      • 第二章 线程安全性
        • 2.2 原子性
        • 2.3 加锁机制
        • 2.3.1 内置锁
        • 2.4
      • 第三章 对象的共享
        • 3.1 可见性
  • JAVA
  • Java进阶
zzoxi
2023-03-16
目录

JAVA并发编程

# 第二章 线程安全性

线程安全性:当多个线程访问某个类式,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。

# 2.2 原子性

++count不是原子操作 包含“读取-修改-写入”操作序列

竞态条件 当某个计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件。正确的结果取决于运行 最常见的竞态条件类型是”先检查后执行“

复合操作 在java.util.concurrent.atomic包中包含了一些原子变量类。 使用包中的AtomicLong来代替long类型的计数器,能够保证所有对计数器状态的访问操作都是原子的。

# 2.3 加锁机制

# 2.3.1 内置锁

同步代码块(Synchronized Block) 同步代码块包括两部分:一个作为锁的对象引用,一个作为由这个锁保护的代码块。

synchronized(lock){

}
1
2
3

这些锁被称为内置锁或监视器锁。 线程进入同步代码块之前自动获得锁,退出代码块时自动释放锁。这是获得内置锁的唯一途径。

# 2.4

# 第三章 对象的共享

# 3.1 可见性

重排序? 为什么永远不停止?

volatile变量。编译器和运行时会注意到这个变量是共享的 不会将该变量上的操作与其他内存操作一起重排序 volatile是一种比synchronized关键字更轻量级的同步机制

加锁机制既可以确保可见性又可以确保原子性,而volatile只能确保可见性

当且仅当满足以下所有条件时,才应该使用volatile变量

  • 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值
  • 该变量不会与其他状态变量一起纳入不变性条件中
  • 访问变量时不需要加锁
java

← java

最近更新
01
MySQL基本使用
03-15
02
java
03-14
03
mysql
03-14
更多文章>
Theme by Vdoing | Copyright © 2023-2023 ZZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式