结论:Java8在设计Lambda时,为了防止可能出现的并发问题,减轻程序员的压力。( - -)!!
这个规则在学习Java8的时候很熟了,之前写程序时也想到了,写一个Runner交给线程池的时候,如果允许引用局部变量去modify,确实容易疏忽导致并发问题,而且还很难复现。
然后在Stack Overflow上找到了官方说法:https://stackoverflow.com/questions/34865383/variable-used-in-lambda-expression-should-be-final-or-effectively-final