是否为 executor.scheduleAtFixedRate() 缓存了参数?

Are parameters cached for executor.scheduleAtFixedRate()?

我有一行按计划重复运行任务:

executor.scheduleAtFixedRate(() -> Task.scanTask(task), 0, scanEvery, unit);

我的问题是,每次执行时都会传递局部变量中的“任务”参数吗?或者它是否被执行程序缓存,以便对局部变量的更改永远不会在下一次计划执行时进入 scanTask?

依赖每个线程访问当前本地值(不是线程安全的)是不好的做法吗?

由于代码使用的是 Lambda 表达式,因此变量 task 必须是一个有效的常量。 IE。它不一定是最终变量,但它的值应该只在 lambda 之前设置一次,然后永远不会改变。同样的 task 对象将在线程中一次又一次地处理。

现在,如果task对象本身是一个列表或者里面有一个列表,如果它不断变化,那么当线程被触发时,无论列表中有什么值,都会被处理.