【发布时间】:2015-01-21 05:47:40
【问题描述】:
我创建了 java Thread 的示例程序,其中我使用 stop() 方法使用以下程序停止线程
public class App extends Thread
{
Thread th;
App(String threadName)
{
th = new Thread(threadName);
}
public synchronized void run() // Remove synchronized
{
for (int i = 0; i < 5; i++) {
System.out.println(th.getName()+" "+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
}
public static void main( String[] args )
{
App thread_1 = new App("Thread-1");
thread_1.start();
thread_1.setPriority(MAX_PRIORITY); //Comment this
thread_1.stop();
App thread_2 = new App("Thread-2");
thread_2.start();
}
}
上述程序的输出是:
Thread-1 0
Thread-1 1
Thread-1 2
Thread-1 3
Thread-1 4
Thread-2 0
Thread-2 1
Thread-2 2
Thread-2 3
Thread-2 4
即thread_1 没有停止。当我删除同步或代码线程中的优先级立即停止并且输出将是
Thread-2 0
Thread-2 1
Thread-2 2
Thread-2 3
Thread-2 4
我无法理解为什么会这样。
【问题讨论】:
-
Thread#stop已弃用 - “此方法本质上是不安全的。...”。您应该考虑改用某种locking mechanism -
@MadProgrammer 我知道亲爱的,但出于知识目的。你能帮我吗
-
不,
stop方法的功能未定义,这就是问题所在。请改用某种锁定机制。 -
为什么你认为thread_1没有停止? thread_1.join 将等到 thread_1 退出。由于 thread_2 确实启动了,这意味着 join 解除阻塞,因此 thread_1 真正停止了。
-
@Nikem 如果删除 join(),输出将相同
标签: java multithreading