Thread d = new Thread(new Runnable() {
@Override
public void run() {
while(true);
}
});
d.start();
Run Code Online (Sandbox Code Playgroud)
如何在不更改方法内部的代码的情况下退出无限循环public void run(),并且不使用d.stop();(不推荐使用的方法).
PS:我更喜欢发布我需要做的整个练习细节.这有点像我需要吃的东西.他们给了我一个有时进入无限循环的函数,我无法改变那个方法.
我正在Android上开发,但问题可能在任何其他Java平台上都同样有效.
我开发了一个多线程应用程序.假设我有一个需要执行时间密集型任务的第一类,因此这项工作在另一个Thread中完成.完成后,相同的Thread会将时间密集型任务结果返回给另一个(第3个)类.
最后一个类将执行某些操作并将其结果返回到第一个启动类.我注意到虽然第一堂课将一直等待,也许是因为这是某种循环?
另外我想让Thread-class停止运行,就像它将结果传递给第三类时它应该停止一样.第三类必须在没有被"封装"在第二类(线程一)的情况下完成它的工作.谁知道怎么做到这一点?
现在的经验是,第一个似乎在等待(悬挂)直到第二个和第三个完成:(
如果这个问题听起来很冒昧,我会提前道歉.我对此很新.所以这就是它...
我一直在研究"java线程停止"问题.我在stackoverflow上阅读了很多文章,他们中的大多数都得出结论,在java中线程停止非常尴尬.一些好方法包括:
join(这个答案有87个upvotes)并等到线程结束.volatile标志以表示其他线程.这个答案得到了113个赞成票Thread.interrupt()并稍后检查 isInterrupted shutdownNow方法没有给出任何保证,并且依赖于该isInterrupted布尔值 但是上述两种方法都不允许立即停止线程.例如,如果程序正在运行某些程序SQL 并等待外部数据库响应,则上述所有方法都将"谦虚地等待",直到SQL完成为止.所以停止不是立竿见影的.只有SQL完成(可能需要数小时),程序才会检查isInterrupted或其他标志,然后停止
这是一个妙语...
我知道Eclipse是java根据这个 stackoverflow的答案编写的.每当我点击红色停止按钮时,Eclipse将立即停止我的应用程序.我认为它不使用,Thread.stop因为它已被弃用.但我无法使用stackoverflow上推荐的那些方法.Eclipse如何设法如此快速地停止线程?
老实说,我无法弄明白 - 我听说这thread.stop()不是一件好事.它也不适合我.如何让线程/处理程序停止运行?
我有一些Task执行可能挂起的 I/O 阻塞操作(从 中获取文件URL)
task = new Task<List<WSDLOperation>>() {
@Override
protected List<WSDLOperation> call() {
List<WSDLOperation> services = new ArrayList<>();
try {
services = WSDLService.createService(wsdlURL).getOperations();
} catch (Exception ex) {
LOG.log(Level.WARNING, "Can't reach {0}", wsdlURL);
}
return services;
}
};
}
Run Code Online (Sandbox Code Playgroud)
该方法createService可以永远等待而不抛出任何Exception。(我使用Main 类中定义的全局 ( static public)执行任务)。ExecutorService