【问题标题】:Wondering what I did wrong on my Java Thread Program?想知道我在 Java 线程程序上做错了什么吗?
【发布时间】:2014-12-10 00:17:23
【问题描述】:

我一直在研究 Java 中的线程,这是我尝试运行 2 个不同的线程来输出 1-30 的偶数以及 1-30 的奇数,每个线程都在不同的线程中.我不确定我是否做错了什么,希望您能帮帮我。

public class evenThread implements Runnable{

public static void run(){
        System.out.println("Even Numbers: ")
        for(int j = 2; j <= 30; j + 2){
            System.out.println(", " & j);
        }
    }
}
public class oddThread implements Runnable{
    public static void run(){
        System.out.println("Odd Numbers: ")
        for(int i = 1; i <= 30; i + 2){
            System.out.print(", " & i);
        }
    }
}
public static void main(String args[]){

    evenThread t1 = new evenThread();
    oddThread t2 = new oddThread();
    t1.start();
    t2.start();
    }
}

【问题讨论】:

  • 当你运行这不是你想要它做的事情时,具体会发生什么?
  • “我不确定我是否做错了什么”如果你尝试编译你的程序,你知道的。

标签: java multithreading


【解决方案1】:

这里是您需要使用的可运行文件:

Thread whatever=new Thread(new  evenThread());
Thread whatever2=new Thread(new  oddThread());

或使用扩展线程而不是实现可运行

runnable 上没有 start 方法,您可以知道这一点,因为 implements 不会添加代码,它只是通知其他事物您将在您的 CODE 中有一个方法,以便他们可以调用该方法。

【讨论】:

    【解决方案2】:

    我不知道你是如何编译它的,因为 run 方法不应该是静态的,因为你应该第二次调用实例方法 oddThreadevenThread 类应该在单独的 java 文件中,或者应该是 Main 的内部类(目前您甚至没有)并且对于从 main 引用的内部类也应该标记为静态。我已将您的代码修复如下,您可以检查差异,例如+ 用于连接字符串的符号

    public class Main {
    
        public static void main(String args[]) {
            Thread t1 = new Thread(new evenThread());
            Thread t2 = new Thread(new oddThread());
            t1.start();
            t2.start();
        }
    
        public static class evenThread implements Runnable {
    
            public void run(){
                System.out.println("Even Numbers: ");
                for(int j = 2; j <= 30; j = j + 2){
                    System.out.print(", " + j);
                }
            }
        }
    
        public static class oddThread implements Runnable {
    
            public void run(){
                System.out.println("Odd Numbers: ");
                for(int i = 1; i <= 30; i = i + 2){
                    System.out.print(", " + i);
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      evenThread 和oddThread 实现Runnable。

      要获得可启动的线程,您必须将它们包装在线程中

      Runnable even = new evenThread();
      Thread t1 = new Thread(even);
      
      t1.start();
      

      在 Java 中无法单独启动 Runnables。

      哦,当然,run-Method 不能是静态的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-10
        • 2015-12-12
        • 2014-10-01
        • 2017-10-07
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        相关资源
        最近更新 更多