A:当多个线程同时共享同一个全局变量或静态变量,改变变量的数据时,可能会发生数据冲突问题,也就是线程安全问题。读取变量不会发生数据冲突。 Q:当有线程安全问题时,应该怎样处理? A:把对全局变量或静态变量做修改的代码放入同步代码块,即synchronized(){}。 PS:synchronized 修饰方法使用锁是当前this锁。synchronized ...
多线程共享全局变量引发线上事故分析 目录 背景 伪代码分析 并发测试 解决方案 背景 数据背景:我们有22个进件分表, 大概10亿的数据,为了方便查询进件, 我们原来封装了一个查询组件, 用来循环遍历这22张表的全部数据。 优化背景: 我们在分析变量计算系统的时候,发现很多sql只需要查询关联的一个数据, 或者只需要一个...
多线程进程之间共享全局变量需要加锁吗 我的观点: 1.只有一个线程写一个基本类型的变量(特指赋值操作),其它线程用来读,就不需要上锁 对int/int64/char型是原子操作, 可不加锁,如果仅是一条汇编指令或者一个“=”赋值语句,那么对int型读写就是原子的 2.只要是对变量的操作是一条汇编语句能执行完的就不需要...
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class PC { private static final Lock lock = new ReentrantLock(); private static final Condition empty = lock.newCondition(); private static final Condition full = lock.newCondition(); private static fin...