Salve, sto avendo dei problemi nella creazione di un semplice programmino per la gestione di thread, non riesco a risolvere per via di un errore di NullPointerException in riga 61 e 80

codice:
public class prova {    public static void main(String[] args){
        Shared n = new Shared();


        Thread_I a = new Thread_I();
        Thread_D b = new Thread_D();


        Thread tI = new Thread(a,"tI");
        Thread tD = new Thread(b,"tD");


        tI.start();
        tD.start();
    }
}






class Shared {
    private int n = 100;
    
    public synchronized boolean somma(int incremento){
        String threadName = Thread.currentThread().getName();
        n+=incremento;
        System.out.println(threadName + "valore di n = "+n);
        
        if(n>150){
            System.out.println("Fine del thread! " + threadName);
            return false;
        }
        
        return true;
    }


    public synchronized boolean sottrai(int decremento){
        String threadName = Thread.currentThread().getName();
        n-=decremento;
        System.out.println(threadName + " valore di n = "+n);


        if(n<80){
            System.out.println("Fine del thread " + threadName);
            return false;
        }
        return true;
    }
}


class Thread_I implements Runnable {
    Shared n;


    public void Thread_I (Shared n) {this.n=n;}


    public void run() {
        int i = 0;
        while(i<1000){
            try{
                Thread.sleep(100);
            }catch (InterruptedException e) {}
			
            int inc = (int)(Math.random()*10);
			
			if (! n.somma(inc)) return;
            i++;
        }
    }
}


class Thread_D implements Runnable {
    Shared n;


    public void Thread_D (Shared n) {this.n=n;}


    public void run () {
        int i = 0;
        while(i<1000){
            try{
                Thread.sleep(300);
            }catch (InterruptedException e) {}
            int decr = (int) (Math.random()*10);


            if(!n.sottrai(decr)) return;
            i++;
        }
    }
}