我想通过按一个按钮使一个线程在GUI中暂停,并且线程可以被使用或自由,直到点击相同的按钮是可能的java。以及它是如何完成的?我正在使用Swing GUI
答案 0 :(得分:1)
没有简单的方法可以暂停一个线程并让它立即免费用于其他任务,然后能够根据需要恢复相同的线程。
您可以使用Thread.sleep()暂停线程,然后让其他线程正常工作,但暂停的线程将被阻止,并且在取消暂停或中断之前无法执行其他工作。
由于线程必须根据其执行情况跟踪其堆栈和所有变量,因此将其暂停在一个执行流程中并让它在取消暂停之前执行其他工作将非常困难。值得注意的是,没有理由甚至尝试这样做,因为你的尝试只是复制已经做过的线程(跟踪堆栈等)。因此,您需要做的是在暂停第一个线程时让另一个线程执行您想要的操作。
长话短说,使用Thread.sleep()暂停,并创建其他线程来完成其他工作(在暂停时不能将暂停的线程用于其他工作)。
答案 1 :(得分:1)
你可能不想做Thread.sleep的接受答案,应该可以了解Swing Event Queue的工作原理。
你想看看:
http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html
特别:
另请参阅这些stackoverflow帖子:
答案 2 :(得分:0)
您可以通过不执行任何操作来模拟暂停。
要模拟,您只需要一个布尔值,该布尔值由线程引用的按钮切换。如果这是真的,那么执行你通常会做的事情,否则只是睡了一会儿。
这是我知道的唯一方式。
答案 3 :(得分:0)
的Thread.sleep(4000);
http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
或者更新的
TimeUnit.SECONDS.sleep(4);
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html
答案 4 :(得分:0)
在多线程中,你可以非常安全地“强迫”。没有线程本身合作的停止/暂停的线程。 (Java有一些错误的方法来尝试这样的Thread.suspend()。你可以阅读它们被弃用的原因。)。
暂停线程的常用方法是设置布尔标志并让该线程轮询该状态。这样它就可以安全地暂停或关闭而不会导致死锁等。
另外,正如@Perry所说,工作者线程可能只是无所事事地进入睡眠状态。防爆。一个处理入队请求的线程。如果队列为空,那么它只是静静地等待新的请求。