一、何为线程不安全?
线程安全: 多线程并发执行时, 没有产生逻辑错误
线程不安全: 多线程并发执行时, 产生逻辑错误
体会线程不安全:
static class Counter {
public int count = 0;
public void increase() {
count++;
// 自增操作步骤:
// 1. 把内存中的数据读取到 CPU 中(load)
// 2. CPU 中把数据加一(increase)
// 3. 把计算结束的数据传回内存中(save)
}
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
Thread t1 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
counter.increase();
}
}
};
Thread t2 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
counter.increase();
}
}
};
t1.start();
t2.start();
t1.join();
t2.join();
// 并发执行
System.out.println(counter.count);
}
}
线程 t1 与线程 t2 并发执行,则线程 t2 可能在线程 t1 执行自增操作期间的任何时刻进行自增操作,所以可能发生线程自增两次,结果却还是 1 的情况,这就是线程不安全。
可以总结出线程不安全的理由:
二、解决线程不安全:
本文地址:https://blog.csdn.net/weixin_45975659/article/details/107621735
如对本文有疑问, 点击进行留言回复!!
深度学习operation: matmul之NV shader实现
详细介绍AUTOSAR各个模块作用PART1(OS,SYS)
Flume 史上最全面的大数据学习第十篇(三)这次应该知道flume的组件和启动命令了吧
Ryzen 3 3300X跑分击败了Core i7-7700K:AMD神性价比
网友评论