java中的线程同步/生产者 - 消费者。重复打印数字1-10然后10-1

时间:2013-03-22 03:25:58

标签: java exception synchronization producer-consumer

我是java的新手,发现了一个练习基本线程同步的练习。问题是反复打印12345678910 10987654321直到程序停止。应该使用十种不同的线程。

这是我的代码到目前为止: 我是第一个尝试获得第一个数字(第一个工作),但它一直给我一个例外

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");
        }
    }
}

我可能会以完全错误的方式解决这个问题,但我已经阅读了很多文档而且我已经完全糊涂了。

1 个答案:

答案 0 :(得分: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");
        }
    }
}

//你需要分配内存以更新数字

//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");
            }
        }
    }