gpt4 book ai didi

java - 线程中的阻塞方法

转载 作者:行者123 更新时间:2023-12-01 18:32:20 25 4
gpt4 key购买 nike

我正在尝试开发一个国际象棋游戏计时器。应该有一个类似的功能

等待用户输入从控制台移动

如果等待时间> 60

停止等待,继续前进。

我能想到的解决这个问题的方法是使用 Thread ,例如:

public class Game {
Thread t1 = new PlayDisc(this);
Thread t2 = new Timer(this);

public static void main(String[] args) {
t1.start();
t2.start();
}
}


public class Timer extends Thread{
Game g;


public Timer(Game g) {
this.g = g;
}

@Override
public void run() {
int i = 0;
while(true){
if(i > 6000) {
g.t1.interrupt();
break;
}
}
}
}

public class PlayDisc extends Thread{
private Game g;

public PlayDisc(Game g) {
this.g = g;
}

@Override
public void run() {
Scanner s = new Scanner(System.in);

int x = s.nextInt();
int y = s.nextInt();

Point p = new Point(x, y);
cm.nextPoint = p;
s.close();
}


}

我知道这不起作用,因为 Scanner.nextInt() 是一种阻塞方法。但我需要从命令行读取输入。有什么办法可以解决这个问题吗?

最佳答案

已经有一个 Timer 类(实际上是两个,java.util.Timerjavax.swing.Timer)。但正如您所意识到的,nextInt() 的阻塞性质会阻止您在超时后执行任何操作。您将需要一个额外的库,它可以为您提供比 Java 默认情况下更好的控制台控制。或者使用 Swing

编辑:通过使用 hasNextInt() 的轮询循环,可能可以执行某种黑客攻击。这样你就不会让扫描线程阻塞。

重新编辑:不,这是不可能的,因为 hasNext() 会阻塞。您必须测试中断是否能让您摆脱这里的麻烦(可能不会)。

关于java - 线程中的阻塞方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com