mahaonan 的个人博客   >   标签墙   >   并发 标签

05-java并发编程(进阶) 有更新!

2022-07-18

05-java并发编程(进阶) java并发编程(进阶篇) 一. volatile关键字 1.1 作用 强制线程到共享内存中读取数据,而不从线程工作内存中读取,从而使变量在多个线程间可见 一般意义上,一个共享变量会有一个共享内存,然后每个线程都有各自的工作内存,当操作数据时,线程会将共享变量从共享内存中读取到自己的工作内存,因此在操作期间,各个线程之间是不可见的,这样就会引发线程安全问题。 使用volatile关键字,则会忽略从共享内存读取到工作内存,在工作内存中进行独立操作的步骤。而是直接从共享内存中拿数据,操作,然后写入。 不使用volatile: 从共享内存读取到工作内存-> 在工作内存中读取到程序并操作-> 写入工作内存-> 写入共享内存 使用volatile: 从共享内存中读取到程序并操作-> 写入到共享内存 因此,解决了线程可见性的问题 例子 package base; import java.util.ArrayList; import java.util.List; public class DemoThread13{ p....

04-java并发编程(基础) 有更新!

2022-07-18

04-java并发编程(基础) java并发编程(基础篇) 一. 线程安全是如何产生的 多个线程操作同一对象 没有达成原子性,即操作是各自独立的,不是一个整体 当多个线程并发运行操作同一数据时,由于线程切换的时机不可控,可能会导致操作该数据时的过程未按照程序设计的执行顺序运行,导致操作出现混乱,严重时可能会导致系统瘫痪. 二. 认识线程安全与Synchronized 2.1 线程安全 概念 当多个线程访问某一个类,对象或者方法时,这个类,对象或方法都能表现出与单线程一致的行为,那么这个类,对象或方法就是线程安全的. 缘由 线程安全问题都是由全局变量及静态变量引起的 注意事项 若只有读操作,无写操作,那么一般而言是线程安全的 若有多个线程同时写,一般都要考虑线程安全问题 2.2 synchronized 普通方法上使用synchronized(对象锁) 当一个方法是用synchronized修饰后,那么该方法变为"同步方法",多个线程不能同时进入方法内容运行.而必须有顺序的一个一个运行.这样就可以避免并发安全问题. 在方法上使用synchro....