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

java中的线程同步/生产者-消费者。重复打印出数字1-10然后10-1,java,exception,synchronization,producer-consumer,Java,Exception,Synchronization,Producer Consumer,我对java非常陌生,并找到了一个关于基本线程同步的练习。问题是重复打印1234567891010987654321,直到程序停止。应使用十种不同的螺纹 这是我目前的代码: 我第一次尝试只获得第一个数字(第一个工作),但它一直给我一个例外 public static void main(String[] args){ threadOne one = new threadOne(); one.start(); } } class updateNumber{ priva

我对java非常陌生,并找到了一个关于基本线程同步的练习。问题是重复打印1234567891010987654321,直到程序停止。应使用十种不同的螺纹

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

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

我可能完全错了,但我已经阅读了大量文档,完全搞糊涂了。

看起来您没有创建更新的新实例

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

看起来您没有创建更新的新实例

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

什么例外?什么线路?当您询问有关异常的问题时,应该发布堆栈跟踪。如果有必要,您可以使用异常必须打印堆栈跟踪的
printStackTrace
方法。我定义了线程2-10,但尚未实现它们,为了更清晰,我将它们从main中取出。当我运行程序时,我的输出是异常块中的“线程1中的错误”。理想情况下,输出为1作为抓取。将执行递增(1)请打印堆栈跟踪(使用
e.printStackTrace()
并发布输出。作为旁注,使用10个线程完成此任务是一个可怕的练习。我无法想象你会从中学到什么。你确定不应该使用两个线程——一个线程生成数字,另一个线程通过打印数字来使用它们吗?Java提示:始终将类名大写。你的Java用户的眼睛-有经验的同事会感谢你的。什么异常?哪一行?当你问一个关于异常的问题时,你应该发布堆栈跟踪。如果必要,你可以使用
printStackTrace
方法,异常必须打印堆栈跟踪。我定义了线程2-10,但还没有实现它们,我将它们从main中取出以供使用更清楚。当我运行程序时,我的输出是异常块中的“线程1中的错误”。理想情况下,作为抓取,输出为1。将执行递增(1)。请打印堆栈跟踪(使用
e.printStackTrace()
并发布输出。作为旁注,使用10个线程完成此任务是一个可怕的练习。我无法想象你会从中学到什么。你确定不应该使用两个线程——一个线程生成数字,另一个线程通过打印数字来使用它们吗?Java提示:始终将类名大写。你的Java用户的眼睛-有经验的同事会感谢你的。