多线程的并发一般不是程序员决定,而是由容器决定。
2023-09-14 09:11:58 时间
下午:
程序员需要关注的线程同步和互斥的问题。
多线程的并发一般不是程序员决定,而是由容器决定。
多线程出现故障的原因:
两个线程同时访问一个数据资源(临界资源),形成数据发生不一致和不完整。
数据的不一致往往是因为一个线程中的两个关联的操作只完成了一步。
避免以上的问题可采用对数据进行加锁的方法
每个对象除了属性和方法,都有一个monitor(互斥锁标记),用来将这个对象交给一个线程,只有拿到monitor的线程才能够访问这个对象。
Synchronized:这个修饰词可以用来修饰方法和代码块
Object obj;
Obj.setValue(123);
Synchronized用来修饰方法,表示当某个线程调用这个方法之后,其他的事件不能再调用这个方法。只有拿到obj标记的线程才能够执行代码块。
注意:Synchronized一定使用在一个方法中。
锁标记是对象的概念,加锁是对对象加锁,目的是在线程之间进行协调。
当用Synchronized修饰某个方法的时候,表示该方法都对当前对象加锁。
给方法加Synchronized和用Synchronized修饰对象的效果是一致的。
一个线程可以拿到多个锁标记,一个对象最多只能将monitor给一个线程。
Synchronized是以牺牲程序运行的效率为代价的,因此应该尽量控制互斥代码块的范围。
方法的Synchronized特性本身不会被继承,只能覆盖。
相关文章
- 并发工具类(一)等待多线程完成的CountDownLatch
- 深入浅出Cocoa多线程编程之 block 与 dispatch quene
- 教程-Delphi多线程数据库查询(ADO)
- 5天不再惧怕多线程——第五天 线程池
- 多线程相关概念
- 创建多线程Thread
- 多线程环境下调用 HttpWebRequest 并发连接限制
- JAVA多线程--信号量(Semaphore)
- 多线程避免使用SimpleDateFormat及替代方案
- 多线程环境下调用 HttpWebRequest 并发连接限制
- Java多线程学习笔记 - 二、自增(减)不是原子操作
- Atitit 并发技术的选项 attilax总结 艾龙 著 1. 三大并发模型1 2. 从可读性考虑 优先使用 并行工作者 多线程模式,不要使用异步流水线模式2 2.1. 多线程模式方便全局
- atitit 高并发之道 attilax著.docx 1. 概念2 2. 并发一般涉及如下几个方面:4 2.1. 多线程编程(已过时,不介绍)4 2.2. 异步编程4 2.3. 并行编程
- 多线程并发快速处理数据
- QT多线程实战_Qt多线程开发项目
- PyTorch训练中Dataset多线程加载数据,而不是在DataLoader
- 7个连环问揭开java多线程背后的弯弯绕
- 多线程单利模式之双检锁必要性
- 高并发之——线程与多线程
- 006-多线程-JUC线程池-并发测试程序
- 多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发
- 14.1 threading--多线程
- C#多线程与异步
- Java多线程7:死锁
- Java并发编程、多线程、线程池…
- 多线程 多进程
- python 多线程
- 并发、并行、同步、异步、多线程的区别?