0

私はJavaに非常に慣れていないので、基本的なスレッド同期に取り組むための演習を見つけました。問題は、プログラムが停止するまで、1234567891010987654321を繰り返し印刷することです。10個の異なるスレッドを使用する必要があります。

これはこれまでの私のコードです:私は最初に最初の番号(機能する番号1)だけを取得しようと取り組んでいますが、例外が発生し続けます

public static void main(String[] args){
   threadOne one = new threadOne();
   one.start();
    }
}

class updateNumber{
    private int i;
    synchronized void increase(int s){
        this.i=s;
        System.out.println(i);
    }
 } 

class threadOne extends Thread {
    private updateNumber grab;
     public void run() {
        try{
         grab.increase(1);
        }
        catch(Exception e){
         System.out.println("error in thread one");
        }
    }
}

私はこれを完全に間違った方法で行っているかもしれませんが、私は多くのドキュメントを読み、完全に混乱しています。

4

1 に答える 1

3

更新の新しいインスタンスを作成しなかったようです

class threadOne extends Thread {
    private updateNumber grab;
     public void run() {
        try{
         grab.increase(1); // null pointer reference...<<<<<<<
        }
        catch(Exception e){
         System.out.println("error in thread one");
        }
    }
}

//このようにupdateNumberにメモリを割り当てる必要があります

//private updateNumber grab = new updateNumber();

    class threadOne extends Thread {
        private updateNumber grab = new updateNumber(); 
         public void run() {
            try{
             grab.increase(1); 
            }
            catch(Exception e){
             System.out.println("error in thread one");
            }
        }
    }
于 2013-03-22T03:35:24.570 に答える