Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java可运行程序在被调用之前就开始运行_Java_Multithreading_Runnable - Fatal编程技术网

Java可运行程序在被调用之前就开始运行

Java可运行程序在被调用之前就开始运行,java,multithreading,runnable,Java,Multithreading,Runnable,我有一个函数,其输出由多个线程处理(在函数调用发生后创建)。但是当我运行程序时,在函数完成运行之前,我从线程接收到一个NullPointerException。如何指定Java不提前启动线程 public class MainThread extends Thread { public MainClass() { ... myRunnable1 = new myRunnable(args[]); myRunnable2 = new myRunnable(args[

我有一个函数,其输出由多个线程处理(在函数调用发生后创建)。但是当我运行程序时,在函数完成运行之前,我从线程接收到一个NullPointerException。如何指定Java不提前启动线程

public class MainThread extends Thread {
    public MainClass() {
    ...
    myRunnable1 = new myRunnable(args[]);
    myRunnable2 = new myRunnable(args[]);
    ...
    }
    public void run() {
        for (someNumberOfRuns) {
            function1();
            System.out.println("Done");
            thread1 = new Thread(myRunnable);
            thread2 = new Thread(myRunnable);
            thread1.start();
            thread2.start();
            ...
        }
     }
}
在for循环的第一次迭代中,thread1和thread2都将抛出NullPointException错误,然后系统将打印“Done”。有人知道为什么两个线程在方法中各自的start()调用之前启动吗? 谢谢 (Java版本为1.6u26)

有人知道为什么两个线程在方法中各自的start()调用之前启动吗

这在Java下不会发生——如果线程正在启动,那么一些代码正在启动它。我怀疑您正在实例化
MainThread
的线程中直接调用
run()
方法,或者在您不期望的地方调用
start()

如果在
run()
方法中添加一个断点以查看是谁在调用它,可能会有所帮助。如果要使用
println
调试,可以打印一个异常,显示
run()
内部的堆栈跟踪:


如果您提供实际实例化
主线程的代码,我们可能会为您提供更多帮助。

如果您询问如何使一组线程同时等待启动

让每个线程执行一个Runnable,并让run()的第一行

其中屏障定义为

final CyclicBarrier barrier = new CyclicBarrier(numThreads + 1);
然后,当你准备好让所有人开始时,打电话

// Wait for all threads to be ready, then start them all at once
barrier.await(LONG_TIMEOUT_MS, TimeUnit.MILLISECONDS);

超时表示您的一个线程没有在给定的时间内执行。

请发布实际的相关代码以及如何运行它的示例,即使用参数。>“对于(someNumberOfRuns){”不作为Java代码进行解析。请重试。不要扩展线程,而是应该实现Runnable以避免混淆。您可以发布编译和演示问题的真实代码吗?并对我的答案进行反馈。如果有帮助,请记住接受它。
final CyclicBarrier barrier = new CyclicBarrier(numThreads + 1);
// Wait for all threads to be ready, then start them all at once
barrier.await(LONG_TIMEOUT_MS, TimeUnit.MILLISECONDS);