【发布时间】:2016-04-10 14:08:40
【问题描述】:
我的主类在main 方法中运行。它运行一个可能需要大量时间才能完成的进程,因此我创建了另一种方法来停止该进程:它只是引发一个标志,使整个进程停止:
public void stopResolutionProcess() {
stop = true;
}
这是执行大流程的调用:
boolean solutionFound = tournament.solve();
所以在此之前,我需要运行一个辅助线程来调用stopResolutionProcess():
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Stop resolution process? (Y/N): ");
String answer = sc.next();
if (answer.equalsIgnoreCase("y")) {
tournament.getSolver().stopResolutionProcess(); // error here
}
}
});
但我在最后一行出现错误。它说:
在封闭范围内定义的局部变量锦标赛必须是最终的 或实际上是最终的
为了测试停止进程的方法,我应该采取什么方法来解决这个问题?
【问题讨论】:
-
如错误提示,您应该将其设为
final或将值复制到最终变量中。 -
“在封闭作用域中定义的局部变量
tournament必须是最终的或有效的最终” 因此,tournament变量声明将很明显包含在问题。
标签: java multithreading scope