Java可运行程序在被调用之前就开始运行
我有一个函数,其输出由多个线程处理(在函数调用发生后创建)。但是当我运行程序时,在函数完成运行之前,我从线程接收到一个NullPointerException。如何指定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[
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);