我的老師告訴我不要用停止(),但在Thread類用這種方式:這是我應該停止Java中的線程的方式嗎?
public void pararHilo() {
stopHilo = true;
}
public void run() {
while (!stopHilo)
c++;
}
據我知道,當pararHilo()被調用的循環結束,因此它退出運行()方法和線程死亡。 事情是,我有一個相當體面的筆記本電腦,當做這個代碼測試(在這裏和在學校)我的機器變得遲滯地獄,我不得不關閉Eclipse ...我錯過了什麼?
整個代碼
public class EjemploHilo {
public static void main(String args[]) {
HiloPrioridad h1 = new HiloPrioridad();
HiloPrioridad h2 = new HiloPrioridad();
HiloPrioridad h3 = new HiloPrioridad();
//el hilo con mas prioridad contara mas deprisa que los demas
h1.setPriority(Thread.MAX_PRIORITY);
h2.setPriority(Thread.NORM_PRIORITY);
h3.setPriority (Thread.MIN_PRIORITY);
h1.start(); h2.start(); h3.start();
try {
Thread.sleep(2000);
} catch (Exception e) { }
h1.pararHilo();
h2.pararHilo();
h3.pararHilo();
System.out.println("h1 (Prioridad Maxima): " + h1.getContador());
System.out.println("h2 (Prioridad Normal): " + h2.getContador());
System.out.println("h3 (Prioridad Minima): " + h3.getContador());
}
}
public class HiloPrioridad extends Thread {
private int c = 0;
private boolean stopHilo= false;
public int getContador() {
return c;
}
public void pararHilo() {
stopHilo = true;
}
public void run() {
while (!stopHilo)
c++;
}
}
請問你能展示更多代碼嗎?一般來說,你應該在兩次執行之間睡覺,或者更優雅地看看java併發包和執行程序。 – rmalchow
是的,這沒關係。你的機器變得滯後的原因是你運行的是非常緊密的循環,它會循環使用100%的CPU。考慮在您的循環中添加一個'Thread.sleep(100)' –
Thread.sleep(10)可能足以獲得不錯的性能。 –