Я получаю следующее сообщение об ошибке при использовании ConcurrentLinkedQueue
:Использование ConcurrentLinkedQueue вызывает ошибку
Ошибка: локальные переменные ссылочные из лямбда-выражения должно быть окончательным или эффективно окончательным
У меня есть довольно простой код, Я просто хочу добавить значение в очередь из нескольких потоков. Проблема в том, что аналогичный код отлично работает с похожими типами запросов.
import java.util.concurrent.ConcurrentLinkedQueue;
ConcurrentLinkedQueue<Double> concurrentLinkedQueue = new ConcurrentLinkedQueue<Double>();
threads = new ArrayList<Thread>();
startTime = System.nanoTime();
for (int i = 0; i < numberOfThread; i++) {
Thread addingThread;
addingThread = new Thread(() -> {
for (int j = 0; j < targetNumber; j++) {
concurrentLinkedQueue.add(5.55); // error line
}
});
threads.add(addingThread);
}
threads.forEach(Thread::start);
for (Thread thread : threads) {
thread.join();
}
Что здесь не так? Я пытаюсь добавить значение const, как это возможно, что он говорит мне о том, что значение не является окончательным?
Вы правы о 'targetNumber' - это не окончательно, и оно меняется. В любом случае окончание очереди заканчивается с ошибкой. – Rocketq