当我运行下面的代码,这是使用java netbeans编译器的多线程的一个例子,我的电脑挂起 为什么会这样?
class clicker implements Runnable
{
int click=0;
Thread t;
private volatile boolean runn=true;
public clicker(int p)
{
t=new Thread(this);
t.setPriority(p);
}
public void run()
{
while(runn)
click++;
}
public void stop()
{
runn=false;
}
public void start()
{
t.start();
}
}
public class Hilopri
{
public static void main(String args[])
{
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
clicker hi=new clicker(Thread.NORM_PRIORITY+2);
clicker low=new clicker(Thread.NORM_PRIORITY-2);
low.start();
hi.start();
try
{
Thread.sleep(500);
}
catch(Exception e)
{
low.stop();
hi.stop();
}
try
{
hi.t.join();
low.t.join();
}
catch(Exception e)
{
System.out.println(e);
}
System.out.println("Low"+low.click);
System.out.println("High"+hi.click);
}
}
答案 0 :(得分:2)
这是因为你在catch块中调用了low.stop()
和hi.stop()
,只有在Thread.sleep(500)
抛出异常时才会执行< =>被打断了。你的代码中没有任何内容会中断它。
你可能想把停止调用放在finally块中:
try {
Thread.sleep(500);
} catch (Exception e) {
} finally {
low.stop();
hi.stop();
}