为了账号安全,请及时绑定邮箱和手机立即绑定

多线程在run()方法上加同步无法保证线程同步

多线程在run()方法上加同步无法保证线程同步

青春有我 2018-10-24 08:58:08
问题描述使用继承Thread方法创建线程实例重写run()方法的时候,用synchronized关键字修饰run()方法结果是线程之间不是同步进行,计算结果出现问题代码片段public class MyThreadDemo9 extends Thread{    private static int count = 0;    public String status;    public MyThreadDemo9(String status){        this.status = status;     }    @Override     public synchronized void run() {        for(int i = 0; i < 100; i++) {             count++;         }     }    public static void main(String[] args) throws InterruptedException {        for(int i = 0; i < 100; i++) {             MyThreadDemo9 m8 = new MyThreadDemo9("Thread status - " + i);             m8.start();         }         Thread.sleep(3000);         System.out.println(MyThreadDemo9.count);     } }这个是什么原因呢,不能使用 synchronized 关键字修饰run()方法吗
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

你这里加锁的是每个线程对象本身,其实并没有并发控制。这里用AtomicInteger就可以实现线程安全的增加

查看完整回答
反对 回复 2018-10-24
  • 1 回答
  • 0 关注
  • 904 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信