1.造成线程不安全的常见5点因素
2.如何解决线程不安全
线程不安全,就是在多线程运行的结束后,结果或者过程并不按照我们预期的那样执行,则为线程不安全,即产生了BUG
出现以下5种情况,一般都会造成线程不安全
1.抢占式执行
2.两个线程修改同一个变量
3.修改的操作不是原子的
4.内存可见性问题
5.指令重排序
举一个线程不安全的代码例子
定义一个count变量,让它从0自增到10w,创建两个线程,每个线程自增5w次,按照这个逻辑,count可以自增到10w吗?
- //定义Counter类,让count自增10w次
- class Counter{
- public int count;
-
- public void increase(){
- count++;
- }
- }
-
- public class Demo1 {
- //实例化Counter对象
- public static Counter counter = new Counter();
-
- public static void main(String[] args) throws InterruptedException {
- Thread thread1 = new Thread(() -> {
- for (int i = 0; i < 50000; i++){