Java leetcode的打印零奇偶问题显示超出错误时间限制

Java leetcode的打印零奇偶问题显示超出错误时间限制,java,multithreading,Java,Multithreading,我尝试了下面的代码来解决leetcode的打印零奇偶问题。 它向我显示了在测试最简单的输入时超出时间限制的错误。 有人能给点建议吗? 类零偶奇数{ 私人int n; 公共零偶数(整数n){ 这个,n=n; } //接受(x)输出“x”,其中x是一个整数。 布尔z=真; public void zero(IntConsumer printNumber)抛出InterruptedException{ 对于(int i=1;i尝试使用synchronized:代码看起来更简单 class ZeroE

我尝试了下面的代码来解决leetcode的打印零奇偶问题。 它向我显示了在测试最简单的输入时超出时间限制的错误。 有人能给点建议吗?

类零偶奇数{
私人int n;
公共零偶数(整数n){
这个,n=n;
}
//接受(x)输出“x”,其中x是一个整数。
布尔z=真;
public void zero(IntConsumer printNumber)抛出InterruptedException{

对于(int i=1;i尝试使用
synchronized
:代码看起来更简单

class ZeroEvenOdd {
    private int n;

    public ZeroEvenOdd(int n) {
        this.n = n;
    }

    private enum STATUS{
        ZERO, ODD, EVEN;
    }

    private STATUS status = STATUS.ZERO;
    private int x = 0;
    private Object lock = new Object();

    // printNumber.accept(x) outputs "x", where x is an integer.
    public void zero(IntConsumer printNumber) throws InterruptedException {
        while(x<=n){
            switch(status){
                case ZERO:
                    synchronized(lock){
                        if(x < n){
                            printNumber.accept(0);    
                        }
                        if(x%2==0){
                            status = STATUS.ODD;
                        }else{
                            status = STATUS.EVEN;
                        }
                        x++;
                    }
                    break;
            }
        }
    }

    public void even(IntConsumer printNumber) throws InterruptedException {
        while(x<=n){
            switch(status){
                case EVEN:
                    if (x<=n){
                        printNumber.accept(x);
                    }
                    status = STATUS.ZERO;
                break;
            }
        }
    }

    public void odd(IntConsumer printNumber) throws InterruptedException {

        while(x<=n){
            switch(status){
                case ODD:
                    synchronized(lock){
                        if(x <= n){
                            printNumber.accept(x);
                        }
                        status = STATUS.ZERO;
                    }
                    break;
            }
        }
    }
}
类零偶奇数{
私人int n;
公共零偶数(整数n){
这个,n=n;
}
私有枚举状态{
零、奇、偶;
}
私有状态STATUS=STATUS.ZERO;
私有整数x=0;
私有对象锁=新对象();
//接受(x)输出“x”,其中x是一个整数。
public void zero(IntConsumer printNumber)抛出InterruptedException{
while(x
class ZeroEvenOdd {
    private int n;

    public ZeroEvenOdd(int n) {
        this.n = n;
    }

    private enum STATUS{
        ZERO, ODD, EVEN;
    }

    private STATUS status = STATUS.ZERO;
    private int x = 0;
    private Object lock = new Object();

    // printNumber.accept(x) outputs "x", where x is an integer.
    public void zero(IntConsumer printNumber) throws InterruptedException {
        while(x<=n){
            switch(status){
                case ZERO:
                    synchronized(lock){
                        if(x < n){
                            printNumber.accept(0);    
                        }
                        if(x%2==0){
                            status = STATUS.ODD;
                        }else{
                            status = STATUS.EVEN;
                        }
                        x++;
                    }
                    break;
            }
        }
    }

    public void even(IntConsumer printNumber) throws InterruptedException {
        while(x<=n){
            switch(status){
                case EVEN:
                    if (x<=n){
                        printNumber.accept(x);
                    }
                    status = STATUS.ZERO;
                break;
            }
        }
    }

    public void odd(IntConsumer printNumber) throws InterruptedException {

        while(x<=n){
            switch(status){
                case ODD:
                    synchronized(lock){
                        if(x <= n){
                            printNumber.accept(x);
                        }
                        status = STATUS.ZERO;
                    }
                    break;
            }
        }
    }
}