0

如何将参数传递给 a Thread

该语句log( "before process , counter = " + i); 导致错误:

不能在不同方法中定义的内部类中引用非最终变量 i

请帮忙

for (int i = 0; i < 20; i++) {
    Thread thread = ThreadManager.createThreadForCurrentRequest(new Runnable() {
        public void run() {
            try {
                log("before process , counter = " + i);
                Thread.sleep(1000);
                log("after process  ,      "  + "counter = " + i);

            } catch (InterruptedException ex) {
                throw new RuntimeException("Interrupted in loop:", ex);
            }
        }
    });
    thread.start();
}
4

2 回答 2

0

正如它所说,只是一个最终变量。这告诉 Java 它不会被更改,并且可以安全地在 Runnable 中使用。

for (int i = 0; i < 20; i++) {
    final int counter=i;
于 2013-06-13T05:42:53.607 回答
0

你需要这样做:

for (int i = 0; i < 20; i++) {
    final int counter = i;
    // etc
}

然后counter在你的线程中使用而不是i(正如错误消息告诉你的那样,它不是最终的,因此不能在这种情况下使用)。

于 2013-06-13T05:46:03.667 回答