您无法按照您想要的方式 最终 从另一个线程中暂停一个线程。
您需要做的是通过设置某种标志来 通知 另一个线程应该停止。有问题的线程必须具有检查该标志并在发生这种情况时暂停其工作的逻辑。
因此,在这种特殊情况下,可能
MyThread如下更改:
class MyThread extends Thread { private volatile boolean running = true; // Run unless told to pause ... @Override public void run() { for(int i=0 ; ; i++) { // only keep painting while "running" is true // This is a crude implementation of pausing the thread while (!running) yield; area.setText(i+""); } public void pauseThread() throws InterruptedException { running = false; } public void resumeThread() { running = true; }}这是一个粗略的例子,为简洁起见,它使用了一种自旋锁,而不是基于监视器的适当睡眠。希望它传达了您如何使用标志来控制线程暂停的想法。
请注意,如果您正在块中执行一些长时间运行的步骤集,而不仅仅是
setText调用,那么最好
Thread.currentThread().interrupted()在每个步骤之间进行检查-
如果设置了itnerrupt标志,则退出循环。广义上讲,这是内置阻塞方法(例如I / O)所做的,以便它们可以被其他线程中断-
由于该
running标志仅在每个循环中被检查一次,因此在每个循环中对其进行设置都无济于事需要20分钟。



