私はスレッドを使用するのが初めてで、スレッドが終了したかどうかを確認し、スレッドから情報を収集する方法を見つけようとしています。ただし、thread.getState() を含むいずれかのスレッドのメソッドを呼び出そうとすると、常にヌル ポインター例外が発生します。私がスレッドをどのように使用しているかに関して、スレッドが Java でどのように機能するかについての洞察をお願いします。
public class MatrixThread extends Thread{
private int num;
private String ref;
private boolean finished;
JsonObject json = new JsonObject();
public MatrixThread(int number){
super("Matrix Thread");
System.out.println("Running Thread: " +number);
num = number;
json = object;
finished = false;
start();
}
public void run(){
System.out.println("Thread #" + num + "Has begun running");
boolean again = true;
while(again){
//Does something
if(wasSuccessful()) {
ref = operation
System.out.println("Success");
finished = true;
} else System.out.println("Did not work try again");
} catch (IOException e) {
System.out.println("Error, Try again");
}
}
}
public boolean isFinished(){
return finished;
}
public String getRef(){
return ref;
}
public int getNum(){
return num;
}
}
そして、プログラムを実行すると、次のようになります
public static void main(String[] args) {
MatrixThread[] threads = new MatrixThread[10];
String[] refs = new String[100];
int count = 0;
for(MatrixThread thread : threads){
thread = new MatrixThread(count);
count++;
}
while(count < 100){
for(MatrixThread thread : threads){
if(thread.getState() == Thread.State.TERMINATED){
refs[thread.getNum()] = thread.getRef();
thread = new MatrixThread(count);
count++;
}
}
}
}
NULL ポインタ例外のため、メイン プロセスの実行は「thread.getState()」で停止します。理由はありますか?