hyetpang 2016-03-19 02:07 采纳率: 39.4%
浏览 1384

关于线程不同步执行的问题

 public class TestSynchronous implements Runnable{
    Timer timer = new Timer();
    public static void main(String[] args){
        TestSynchronous test = new TestSynchronous();
        Thread t1 = new Thread(test);
        Thread t2 = new Thread(test);
        t1.setName("t1");
        t2.setName("t2");
        t1.start();
        t2.start();
    }

    public void run(){
        timer.add(Thread.currentThread().getName());
    }
}

class Timer{
    private static int num = 0;
    public void add(String name){
        num++;
        try{
            Thread.sleep(1);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
        System.out.println(name+": " +"是第"+num+"线程");
    }
}

第一次在命令行编译执行时是这样:
图片说明
随着执行次数的增加,有时候输出变成这样了:
图片说明
下面这个图是总的执行次数,可以看出,有一个num输出为1:
图片说明

  • 写回答

1条回答

  • 毕小宝 博客专家认证 2016-03-19 02:18
    关注

    由于num是静态共享变量,但是同时被多个线程访问,所以必须对其作同步控制,修正你的Timer的add方法,把num++放在同步互斥代码块中保证同一时刻只能有一个线程对其修改,修改版如下:

    synchronized(Timer. class){num++;}

    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题