앞서 살펴본 것처럼, 람다 표현식은 해당 표현식을 감싸고 있는 유효 범위에 있는 변수의 값을 캡처할 수 있다. 자바에는 캡처한 값이 잘 정의되어 있음을 보장하기 위한 중요한 제약이 있다. 람다 표현식에서는 값이 변하지 않는 변수만 참조할 수 있다. 예를 들어, 다음은 잘못된 참조다.
public static void repeatMessage(String text, int count) {
Runnable r = () -> {
while (count > 0) {
count--; // 오류: 캡처한 변수는 변경할 수 없다.
System.out.println(text);
Thread.yield();
}
};
new Thread(r).start();
}