是否为 executor.scheduleAtFixedRate() 缓存了参数?
Are parameters cached for executor.scheduleAtFixedRate()?
我有一行按计划重复运行任务:
executor.scheduleAtFixedRate(() -> Task.scanTask(task), 0, scanEvery, unit);
我的问题是,每次执行时都会传递局部变量中的“任务”参数吗?或者它是否被执行程序缓存,以便对局部变量的更改永远不会在下一次计划执行时进入 scanTask?
依赖每个线程访问当前本地值(不是线程安全的)是不好的做法吗?
由于代码使用的是 Lambda 表达式,因此变量 task
必须是一个有效的常量。 IE。它不一定是最终变量,但它的值应该只在 lambda 之前设置一次,然后永远不会改变。同样的 task
对象将在线程中一次又一次地处理。
现在,如果task
对象本身是一个列表或者里面有一个列表,如果它不断变化,那么当线程被触发时,无论列表中有什么值,都会被处理.
我有一行按计划重复运行任务:
executor.scheduleAtFixedRate(() -> Task.scanTask(task), 0, scanEvery, unit);
我的问题是,每次执行时都会传递局部变量中的“任务”参数吗?或者它是否被执行程序缓存,以便对局部变量的更改永远不会在下一次计划执行时进入 scanTask?
依赖每个线程访问当前本地值(不是线程安全的)是不好的做法吗?
由于代码使用的是 Lambda 表达式,因此变量 task
必须是一个有效的常量。 IE。它不一定是最终变量,但它的值应该只在 lambda 之前设置一次,然后永远不会改变。同样的 task
对象将在线程中一次又一次地处理。
现在,如果task
对象本身是一个列表或者里面有一个列表,如果它不断变化,那么当线程被触发时,无论列表中有什么值,都会被处理.