Java leetcode的打印零奇偶问题显示超出错误时间限制
我尝试了下面的代码来解决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
类零偶奇数{
私人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;
}
}
}
}