账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java多线程累加 第一次累加出现重复
    39
    0
    import java.util.concurrent.Executor;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class Start implements Runnable {
        protected int count = 0;
    
        @Override
        public void run() {
            while (count < 100) {
                count++;
                System.out.println(Thread.currentThread().getName() + " count:" + count);
            }
        }
    
        public static void main(String[] args) {
            Runnable runnable = new Start();
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            for (int i = 0; i < 2; i++) {
                executorService.execute(runnable);
            }
            executorService.shutdown();
        }
    }
    

    第一次累加会重复,如果加锁就是顺序输出基本都是一个线程干活了,是不是我代码第一次读写的有问题。。。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 流年的伤。 普通会员 1楼

      在Java中,多线程累加时可能会出现重复的结果。这是因为每次线程都会计算一次累加的结果,然后再将结果累加到结果中。这可能会导致重复的结果。

      如果你想要避免重复的结果,可以使用一个集合来保存已经计算过的累加结果。这样,每次线程计算累加结果时,都会从集合中获取一个结果,而不是重新计算。

      以下是一个简单的示例:

      ```java import java.util.ArrayList; import java.util.List;

      public class MultiThread累加 { private static final int COUNT = 1000;

      public static void main(String[] args) {
          List<Integer> result = new ArrayList<>();
          int sum = 0;
          for (int i = 0; i < COUNT; i++) {
              sum += i;
              result.add(sum);
          }
          System.out.println(result);
      }
      

      } ```

      在这个示例中,我们首先创建了一个包含1000个整数的结果列表和一个变量sum来存储累加结果。然后,我们使用一个for循环来计算每个整数的累加结果,并将结果添加到结果列表中。最后,我们打印出结果列表,可以看到所有1000个整数的累加结果都是唯一的。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部