【发布时间】:2017-05-26 16:11:03
【问题描述】:
使用的线程
public class MissedThread extends Thread
{
public synchronized void run()
{
try
{
Thread.sleep(1000);
System.out.println("Too slow");
}catch(InterruptedException e){return;}
}
}
使用上述线程的程序
import java.util.Scanner;
public class FastMath
{
public static void main(String[] args)
{
System.out.println("How many questions can you solve?");
Scanner in = new Scanner(System.in);
int total = in.nextInt();
MissedThread m = new MissedThread();
int right = 0;
int wrong = 0;
int missed = 0;
for(int i = 0;i<total;i++)
{
int n1 = (int)(Math.random()*12)+1;
int n2 = (int)(Math.random()*12)+1;
System.out.print(n1+" * "+n2+" = ");
m.start();
int answer = in.nextInt();
if(answer==n1*n2)
{
right++;
continue;
}
if(answer!=n1*n2)
{
wrong++;
continue;
}
}
}
}
所以程序的目的是,如果用户在 1 秒(Thread.sleep 的持续时间)内没有输入数字,它将打印一条消息并继续下一次迭代。但是,如果它得到及时回答,它只会停止程序。如果没有及时回答,它似乎会卡住,不会移动到 for 循环的下一次迭代。
【问题讨论】:
-
您必须为此使用
Thread吗?还有其他可能更容易实施的解决方案。 -
扩展
Runnable,而不是Thread。不要同步run方法。研究如何处理InterruptedException,这里不做。摆脱多余的return和continue语句。您的主线程不会等待计时线程,因此后者无效。线程不共享信息,因此主线程无法判断是否违反了时间约束。
标签: java multithreading for-loop java.util.scanner thread-sleep