0

How can I run code inside a custom thread that has already started?

I need it to run code inside a started thread like EDT-SwingUtilities.invokeLater() or Android.view.runOnUIThread() does.

Thanks!

4

2 回答 2

7

简而言之,您的特殊线程需要保留一个任务队列来运行,然后等待任务被添加到该队列中。当出现任务时,它应该运行该任务,然后返回并等待更多。确保使用适当的同步来保护该队列,因为它将被多个线程访问。并且要非常小心,异常不会意外终止您的循环。

当然,这正是用户界面的事件调度线程所做的。

于 2013-08-26T14:52:01.980 回答
2

如果您希望能够在一个不专门用于接受执行任务的线程上执行此操作,那么答案很简单:您所要求的是不可能的。完成此操作的唯一方法是与您要执行此操作的线程进行显式合作。

如果上述段落没有阻止您,那么最好的选择是使用ExecutorService并提交任务给它。如果这是您的目标,该服务可以配置为单线程。

于 2013-08-26T14:56:25.517 回答