private void stopThread() {
thread1.canRun(false);
}
private void createThread() {
thread1.stopThread();
thread1.canRun(true);
thread1 = new Thread(thread1);
t.start();
}
我正在创建一个战舰游戏,当用户用他的船射击时,线程开始,他有n秒的时间进行射击,如果他们用尽,他就会失去游戏。 当他再次射击时,最后一个线程停止并开始一个新线程。 这就是为什么我在创建线程中调用stop thread。
public void canRun(boolean canrun) {
this.canrun= canrun;
}
public thread(player player, gamej) throws RemoteException {
this.player= player;
this.j = j;
tiempoTimeOut = j.getTimeout();
}
@Override
public void run() {
try {
for (int i = 0; i <= TimeOut && canRun; i++) {
// System.out.println(i);
Thread.sleep(1000);
if (i ==tiempoTimeOut) {
j.notifiy();//the player lost code irrelevant
}
}
}
问题是,当我停止传输for不应该继续运行并且线程结束但我认为当我开始新线程时,canRun(true)远远超过&#34;对于&#34;结构体。 所以它在第一个线程完成之前改变了变量方式 所以它继续运行因为canRun回归真实
我认为解决方案是在某处使用syncrhonized 但我不确定.. 谢谢你
答案 0 :(得分:0)
您可以使用Thread.currentThread.isInterruptted()
代替canRun
变量。
比如
private void stopThread() {
thread1.interrupt();
}
private void createThread() {
thread1.stopThread();
thread1 = new Thread(thread1);
thread1.start();
}
并且run
方法可以像这样
public run() {
try {
for (int i = 0; i <= TimeOut && !Thread.currentThread.isInterrupted(); i++) {
// System.out.println(i);
Thread.sleep(1000);
if (i ==tiempoTimeOut) {
j.notifiy();//the player lost code irrelevant
}
}
} catch ......