当前位置:
首页 >
多个线程直接按对数据进行操作容易引发线程安全问题
发布时间: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
总结
以上是生活随笔为你收集整理的多个线程直接按对数据进行操作容易引发线程安全问题的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 1355: [Baltic2009]Ra
- 下一篇: 第3章 简单爬虫架构