2012-03-21 39 views
0

我想通过按下一个按钮使一个线程在GUI中暂停,并且可以使用或释放​​该线程,直到单击相同的按钮,这在java中是可能的。和任何想法如何完成?我正在使用Swing GUI暂停线程使它可以自由地做其他事情,并在java中的特定时间后继续?

+0

答案是肯定的..你可以添加更多的细节像它的UI库(摇摆):) – 2012-03-21 00:21:42

+0

是我正在使用Swing什么更多的信息,你会喜欢更多,所以我可以编辑的问题,并添加他们 – 2012-03-21 00:22:45

+0

@dorinaji你是什么意思,你想'线程'被使用?你想让它运行一个完全不同的任务? – Jeffrey 2012-03-21 00:31:51

回答

1
0

您可以通过不做任何事情来模拟暂停。

为了模拟,你需要的是由该线程具有参考按钮切换一个布尔值。如果这是真的,那么执行你通常会做的事,否则就睡一会儿。

这是我知道如何的唯一方法。

+0

是的,我知道这种方式,但我想要的线程是免费的,可以使用 – 2012-03-21 00:27:51

0
+0

我添加了TimeUnit,但我不推荐它(请参阅我的答案)。 – 2012-03-21 01:21:30

+0

*这是一个有效的答案?我不知道OP为什么接受它。这个答案并没有提到任何关于你的线程睡眠信号的方式,这是最重要的部分,imho。 – Kiril 2012-03-21 01:37:38

+0

问题有些模棱两可。暂停线程听起来像他之后的事情。重读这个问题后,仍然不清楚OP是什么。 – dbrin 2012-03-21 02:11:39

1

有暂停线程并立即进行其他作业,然后才能够恢复需求是相同的线程没有简单的方法。

您可以暂停使用Thread.sleep()方法的线程,然后有其他线程做的工作,但暂停的线程将被阻塞,无法做更多的工作,直至取消暂停或中断。

由于线程来跟踪它的堆栈和所有依照其执行的变量,这将是相当困难的暂停执行中的一个流程,并把它取消暂停之前做其他工作。值得注意的是,没有理由甚至试图做到这一点,因为你的尝试只会重复线程已经做了什么(跟踪堆栈等)。所以你需要做的是让另一个线程在你暂停第一个线程时做你想做的事情。

长话短说,用了Thread.sleep()暂停,并创建额外的线程做你的其他工作(虽然暂停,你不能使用线程暂停其他工作)。

0

在多线程中,如果没有线程本身的协作,就无法真正安全地“强制”线程停止/暂停。 (Java有一些设计错误的方法来尝试这种Thread.suspend(),你可以阅读它们为什么被弃用)。

暂停线程的常用方法是设置布尔标志并让该线程轮询该状态。这样,它可以安全地暂停或关闭,而不会导致死锁等

此外,作为@Perry指明了工作线程可能会通过无关干脆睡觉。防爆。一个处理入队请求的线程。如果队列是空的,那么它只是静静地等待新的请求。

+0

是的,这些方法是构思不清。但是,从JVM内部进行非自主决定的线程控制是一个非常棘手的问题......并且比在Java 1.0时代所实现的难得多。 – 2012-03-21 01:13:15

+0

@Stephen C我认为这是现实世界中的线程问题。与单独的进程不同,线程共享更多的状态(例如内存)。 Pthreads没有这样的方法。我好像原始的Java实现者并不知道关于线程的知识。 – seand 2012-03-21 01:21:00

+0

@seand Yah,100%正确:暂停是一个糟糕的主意,它甚至被弃用。 – Kiril 2012-03-21 01:42:02

相关问题