CSDNRGY 2017-02-23 05:45 采纳率: 87.5%
浏览 813
已采纳

为什么我没有做同步操作,但是多线程的计算结果是正确的,这是为什么?

 public class Test {

    public static void main(String[] args) {
        int nThreads = 100;
        ExecutorService es = Executors.newFixedThreadPool(nThreads );
        CyclicBarrier barrier = new CyclicBarrier(nThreads);
        for(int i =0;i<nThreads;i++){
            es.execute(new Task(i,barrier));
        }
        es.shutdown();
    }
}
 public class Task implements Runnable {

    int id;
    CyclicBarrier barrier;

    public Task(int _id, CyclicBarrier _barrier) {
        id = _id;
        barrier = _barrier;
    }

    @Override
    public void run() {
        try {
            System.out.println(id + " begin");
            long startTime = System.currentTimeMillis();
            TimeUnit.SECONDS.sleep(new Random().nextInt(5));
            long endTime = System.currentTimeMillis();
            long costTime = endTime - startTime;
            Sum.sum += costTime;
            barrier.await();
            System.out.println(id + " end," + costTime + " ms, sum " + Sum.sum);
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }
    }
}

 public class Sum {

    static long sum;

}

1 begin
3 begin
2 begin
0 begin
4 begin
6 begin
8 begin
9 begin
5 begin
10 begin
12 begin
7 begin
11 begin
14 begin
15 begin
16 begin
17 begin
13 begin
18 begin
19 begin
20 begin
21 begin
22 begin
23 begin
24 begin
25 begin
26 begin
27 begin
28 begin
29 begin
30 begin
32 begin
31 begin
35 begin
34 begin
38 begin
36 begin
33 begin
37 begin
39 begin
40 begin
41 begin
42 begin
43 begin
44 begin
45 begin
46 begin
48 begin
47 begin
50 begin
49 begin
51 begin
52 begin
53 begin
54 begin
55 begin
56 begin
57 begin
58 begin
59 begin
60 begin
61 begin
62 begin
63 begin
64 begin
65 begin
66 begin
67 begin
68 begin
69 begin
70 begin
71 begin
72 begin
73 begin
74 begin
75 begin
76 begin
77 begin
78 begin
79 begin
80 begin
81 begin
82 begin
83 begin
84 begin
85 begin
86 begin
87 begin
88 begin
89 begin
90 begin
92 begin
91 begin
93 begin
94 begin
95 begin
96 begin
97 begin
98 begin
99 begin
8 end,0 ms, sum 174037
4 end,0 ms, sum 174037
11 end,0 ms, sum 174037
14 end,0 ms, sum 174037
16 end,0 ms, sum 174037
18 end,0 ms, sum 174037
26 end,0 ms, sum 174037
29 end,0 ms, sum 174037
38 end,0 ms, sum 174037
36 end,0 ms, sum 174037
37 end,0 ms, sum 174037
42 end,0 ms, sum 174037
44 end,0 ms, sum 174037
45 end,0 ms, sum 174037
48 end,0 ms, sum 174037
61 end,0 ms, sum 174037
62 end,0 ms, sum 174037
63 end,0 ms, sum 174037
66 end,0 ms, sum 174037
67 end,0 ms, sum 174037
69 end,0 ms, sum 174037
74 end,0 ms, sum 174037
82 end,0 ms, sum 174037
87 end,0 ms, sum 174037
98 end,0 ms, sum 174037
20 end,1000 ms, sum 174037
84 end,0 ms, sum 174037
99 end,4001 ms, sum 174037
13 end,1000 ms, sum 174037
21 end,1000 ms, sum 174037
28 end,1000 ms, sum 174037
32 end,1000 ms, sum 174037
30 end,1000 ms, sum 174037
33 end,1000 ms, sum 174037
41 end,1000 ms, sum 174037
51 end,1000 ms, sum 174037
47 end,1000 ms, sum 174037
52 end,1000 ms, sum 174037
49 end,1000 ms, sum 174037
68 end,1000 ms, sum 174037
65 end,1000 ms, sum 174037
70 end,1000 ms, sum 174037
9 end,2000 ms, sum 174037
25 end,2000 ms, sum 174037
27 end,2000 ms, sum 174037
23 end,2000 ms, sum 174037
39 end,2000 ms, sum 174037
34 end,2000 ms, sum 174037
54 end,2000 ms, sum 174037
0 end,2001 ms, sum 174037
60 end,2000 ms, sum 174037
97 end,1000 ms, sum 174037
56 end,2000 ms, sum 174037
71 end,2000 ms, sum 174037
78 end,2000 ms, sum 174037
86 end,2000 ms, sum 174037
83 end,2000 ms, sum 174037
89 end,1000 ms, sum 174037
80 end,1000 ms, sum 174037
79 end,2000 ms, sum 174037
94 end,2000 ms, sum 174037
6 end,3001 ms, sum 174037
2 end,3001 ms, sum 174037
73 end,1000 ms, sum 174037
76 end,1000 ms, sum 174037
1 end,3002 ms, sum 174037
77 end,1000 ms, sum 174037
3 end,3002 ms, sum 174037
15 end,3001 ms, sum 174037
12 end,3001 ms, sum 174037
93 end,2000 ms, sum 174037
85 end,2000 ms, sum 174037
10 end,2000 ms, sum 174037
35 end,3001 ms, sum 174037
50 end,3001 ms, sum 174037
53 end,3001 ms, sum 174037
40 end,3001 ms, sum 174037
72 end,3001 ms, sum 174037
24 end,3001 ms, sum 174037
75 end,3001 ms, sum 174037
58 end,3001 ms, sum 174037
91 end,3001 ms, sum 174037
92 end,3001 ms, sum 174037
7 end,4001 ms, sum 174037
95 end,3001 ms, sum 174037
22 end,4001 ms, sum 174037
17 end,4001 ms, sum 174037
19 end,4001 ms, sum 174037
46 end,4001 ms, sum 174037
59 end,4001 ms, sum 174037
55 end,4001 ms, sum 174037
64 end,4001 ms, sum 174037
81 end,4001 ms, sum 174037
5 end,4001 ms, sum 174037
57 end,4001 ms, sum 174037
90 end,4001 ms, sum 174037
88 end,4001 ms, sum 174037
43 end,4001 ms, sum 174037
31 end,4001 ms, sum 174037
96 end,4001 ms, sum 174037

  • 写回答

2条回答 默认 最新

  • 白萝卜。 2017-02-23 05:49
    关注

    变量提出来,static修饰这个变量就行,这只是最简单的处理方式。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程
  • ¥15 arduino esp8266开发