欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

多个线程直接按对数据进行操作容易引发线程安全问题

发布时间:2025/3/18 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 多个线程直接按对数据进行操作容易引发线程安全问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

参考链接:http://www.cnblogs.com/paddix/p/5374810.html

代码:

public class Count {public int num;public void add(){for(int i =0;i < 10;i++){num++;}System.out.println(Thread.currentThread().getName()+"-" +num);}} public class MyThreadTest {public static void main(String[] args){Count count = new Count();for(int i =0;i<10;i++){new Thread(new Runnable() {@Overridepublic void run() {try {
              /增加线程的并发性Thread.sleep(
1);} catch (InterruptedException e) {e.printStackTrace();}count.add();}}).start();}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(count.num);} }

结果展示:

Thread-9-80 Thread-7-90 Thread-4-70 Thread-5-70 Thread-2-70 Thread-0-80 Thread-1-70 Thread-6-80 Thread-3-70 Thread-8-70 90

以上的代码原本应该等于100,但由于存在线程的问题,10个线程同时共享同一个变量,这样就容易产生线程安全问题。

原因:线程直接不能直接传递数据,他们之间的交互是通过共享数据来实现。如上述的代码中,10个线程共用一个count对象,这个count对象是在主内存中,每个线程都有自己的线程栈,都是从主存中读取count对象的值并复制过来,然后执行完add()方法后,再刷新到主存中,这样就很容易造成线程安全。

 

转载于:https://www.cnblogs.com/lfdingye/p/7355630.html

总结

以上是生活随笔为你收集整理的多个线程直接按对数据进行操作容易引发线程安全问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。