Thread中的异常(java.nullPointerException)

Sha*_*dan 0 java

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

嗨,我写了这个程序,以了解线程的工作原理.在这里,我将Printer类设为singleton,并尝试通过实现Runnable在第二类PrintThread中实现线程.在这里我覆盖了Run(){}方法,但在执行时,jvm抛出一个错误,说有一个

PrintThread.run中的"Thread-0"(java.nullPointerException)中的异常(Printer.java:31).

我试图谷歌它,并阅读其他相关的问题,但我仍然无法纠正这个问题

Jer*_*vel 5

static Printer obj =null;
    private Printer(){}
     public static Printer getInstance(){
         if(obj==null){
             Printer pr=new Printer();
         }
     return obj;  
     }
Run Code Online (Sandbox Code Playgroud)

您创建一个新Printer对象,但返回null值.

正确:

static Printer obj = null;
private Printer(){}

public static Printer getInstance(){
 if(obj == null){
  obj = new Printer();
 }
 return obj;
}
Run Code Online (Sandbox Code Playgroud)