public class Printer {
static Printer obj =null;
private Printer(){}
public static Printer getInstance(){
if(obj==null){
Printer pr=new Printer();
}
return obj;
}
void print(String msg){
System.out.println("["+msg);
try {
Thread.sleep(1000);
} catch(InterruptedException c) {
c.printStackTrace();
}
System.out.println("]");
}
}
class PrintThread implements Runnable {
Printer p;
String msg;
PrintThread(Printer p,String msg) {
this.p=p;
this.msg=msg;
}
public void run() {
p.print(msg);//Getting error in this line
}
}
//Deploying main class
public class Execution {
public static void main(String[] args) {
Printer pr=Printer.getInstance();
Thread t1=new Thread(new PrintThread(pr,"java"));
t1.start();
PrintThread r=new PrintThread(pr,"javadeveloper");
Thread t2=new Thread(r);
t2.start();
}
}
こんにちは、スレッドがどのように機能するかを理解するためにこのプログラムを作成しました。ここではPrinterクラスをsingletonにし、Runnableを実装することで2番目のクラスPrintThreadにスレッドを実装しようとしました。ここでRun(){}
メソッドをオーバーライドしましたが、実行時にjvmがエラーをスローしています
PrintThread.run(Printer.java:31) での「Thread-0」(java.nullPointerException) での例外。
私はそれをグーグルで検索し、他の関連する質問も読みましたが、それでも問題を修正できません