【java并发编程实战】第一章笔记
2024-08-25 22:53:03
1.线程安全的定义
当多个线程访问某个类时,不管允许环境采用何种调度方式或者这些线程如何交替执行,这个类都能表现出正确的行为
如果一个类既不包含任何域,也不包含任何对其他类中域的引用。则它一定是无状态的对象,无状态对象一定是线程安全的
2.竞态条件
并发编程中,由于不恰当的执行时序导致不正确的结果。当某个计算结果的正确性取决于多线程交替执行时序时,就会发生竞态条件。
常见的竞态条件:
- 先检查后执行。
- 读取-修改-写入
3.复合操作
为了避免产生竞态条件,必须以原子的形式执行一组操作。
4.内置锁(监视器锁)
java提供了内置的原子性操作的锁机制:同步代码块(synchronize),它包含两部分,一个作为锁的对象引用。一个作为由这个锁保护的代码块。每个java对象都是自带一个监视器锁。线程进入获取锁,出来释放锁。
- 4.1 重入
定义:当某个线程请求由其他线程持有的锁时,就会发生堵塞。但是内置锁是可以重入的,当该线程尝试或的锁是已经由自己持有的,那么该请求就会成功。重入意味着 锁的粗粒度是线程而非调用。
如下代码,如果内置锁不可重入,下面的代码就会发生死锁。
public class SynchronizeTest extends superSynchronize {
@Override
public synchronized void superMethod1() {
System.out.println("synchronized test ");
super.superMethod1();
}
public static void main(String[] args) {
new SynchronizeTest().superMethod1();
}
}
class superSynchronize {
public synchronized void superMethod1() {
System.out.println("superMethod1 sybchronized");
}
}
最新文章
- Mac 热键大全
- Zookeeper分布式集群搭建
- javascript要不要用来处理业务逻辑
- git中ssh配置方法
- UVa 11014 (莫比乌斯反演) Make a Crystal
- PHP Java
- hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6
- mxnet:结合R与GPU加速深度学习
- 打开CSDN论坛出现403
- 利用RTL2832u电视棒芯片追踪民航飞机轨迹
- 判断客户端是IOS还是Android
- mybatis入门篇:Mybatis注解方式的基本用法
- 061 SparkStream数据接收原理
- 00-JAVA语法基础--动手动脑
- D6差分及树上差分
- MySQL学习笔记2(多表操作)
- MR室内室外用户区分
- python-----多线程、线程池、进程池
- Python——列表深浅拷贝
- 反射已经";Out";,动态编译才能";Hold";住
热门文章
- js控制select选中显示不同表单内容
- 出门旅行(tour)
- Python——字典
- 如何在RedHat 7.0系统中安装mysql 5.7.22
- gzip,bzip2,xz压缩工具
- 【PHP项目】$_SEVER详解
- Linux编译移植Qt5的环境_Xillinx的ZYNQ平台
- [BZOJ2734][HNOI2012] 集合选数(状态压缩+思维)
- 25-IHostEnvironment和 IApplicationLifetime介绍
- 菜鸟学Linux - Tarball安装的一般步骤