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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java线程问题,如何修改代码,让程序能够正常输出如下结果?
    31
    0
    package com.elyong.whatsup;
    /**
     * Created by ely ong on 2017/12/5.
     */
    public class TestThreads{
        public static void main(String[] args){
            ThreadOne t1=new ThreadOne();
            ThreadTwo t2=new ThreadTwo();
            Thread one=new Thread(t1);
            Thread two=new Thread(t2);
            one.start();
            two.start();
        }
    }
    class Accum{
        private static Accum a=new Accum();
        private int counter=0;
        private Accum(){}
        public static Accum getAccum(){
            return a;
        }
        public void updateCounter(int add){
            counter+=add;
        }
        public int getCount(){
            return counter;
        }
    }
    class ThreadOne implements Runnable{
        Accum a=Accum.getAccum();
        public void run(){
            for(int x=0;x<98;x++){
                a.updateCounter(1000);
                try{
                    Thread.sleep(50);
                }catch (InterruptedException ex){}
            }
            System.out.println("one "+a.getCount());
        }
    }
    class ThreadTwo implements Runnable{
        Accum a=Accum.getAccum();
        public void run(){
            for(int x=0;x<99;x++){
                a.updateCounter(1);
                try{
                    Thread.sleep(50);
                }catch (InterruptedException ex){}
            }
            System.out.println("two "+a.getCount());
        }
    }
    

    输出结果:

    one 98098
    two 98099
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 忘卜掉的曾经 普通会员 1楼

      以下是一个简单的Java线程问题,假设我们有一个Thread类,它有一个join方法,这个方法会在线程执行完毕后等待所有其他的线程完成。为了输出以下结果,我们可以修改这个join方法的实现,如下所示:

      ```java public class Main { public static void main(String[] args) { Thread thread1 = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10000; i++) { System.out.println("Thread 1 " + i); } } });

          Thread thread2 = new Thread(new Runnable() {
              @Override
              public void run() {
                  for (int i = 0; i < 10000; i++) {
                      System.out.println("Thread 2 " + i);
                  }
              }
          });
      
          thread1.start();
          thread2.start();
      
          thread1.join();
          thread2.join();
      
          System.out.println("All threads completed");
      }
      

      } ```

      在这个例子中,我们首先创建了两个新的Thread对象thread1thread2,然后在main方法中将它们初始化为Runnable对象,这些Runnable对象分别执行一个名为run的方法。run方法使用了一个for循环来打印Thread对象的id和当前时间,然后在每次循环中调用join方法,这样所有其他的线程都会被阻塞,直到run方法执行完毕。

      join方法的返回值是一个boolean,当join方法调用完毕时,它返回true,表示所有线程都已执行完毕,否则返回false。因此,我们在main方法中调用了thread1.join()thread2.join(),然后打印出结果,即所有线程都已经完成。

      如果上述代码中的join方法没有实现相应的逻辑,或者join方法调用时run方法没有正确返回false,那么在主方法中输出的将会是未完待续的输出,而不是我们期望的结果。例如,如果join方法在循环中调用了join方法,而run方法并没有正确返回false,那么输出结果将会是Thread 1 9999 Thread 2 9999,而不是我们期望的结果,即Thread 1Thread 2都已经完成。

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