java - 如何在以下 lambda exp 中添加同步?
问题描述
{
List<Integer> list = new ArrayList<>(10000);
IntStream.range(1, 10000).forEach(list::add);
Thread reader = new Thread(() -> {
list.forEach(i -> System.out.println("r " + i));
}, "t1");
}
可以将同步块用于一些用 lambda 表达式编写的代码块。关于以下代码片段:
解决方案
可以在 Java Lambda 表达式和匿名类中使用同步块。
注意:您忘记添加代码片段,因为您的代码中没有可见的代码片段,所以我会添加自己的代码片段以明确我的观点。
import java.util.function.Consumer;
public class SynchronizedExample {
public static void main(String[] args) {
Consumer<String> func = (String param) -> {
synchronized(SynchronizedExample.class) {
System.out.println(
Thread.currentThread().getName() +
" step 1: " + param);
try {
Thread.sleep( (long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(
Thread.currentThread().getName() +
" step 2: " + param);
}
};
Thread thread1 = new Thread(() -> {
func.accept("Parameter");
}, "Thread 1");
Thread thread2 = new Thread(() -> {
func.accept("Parameter");
}, "Thread 2");
thread1.start();
thread2.start();
}
}
推荐阅读
- vega-lite - Vega lite:如何更改值标签
- python - 我该如何解决这个“推送被拒绝,无法编译 Python 应用程序”。!Heroku中的“推送失败”错误
- python - Matplotlib:FuncAnimation 停止后如何添加绘图?
- python - 混合int和str键时对字典值的不同访问时间
- javascript - MongoDB 嵌套聚合查找
- typescript - 在 vuex-module-decorators 的 @ModuleAction 中使用状态
- javascript - 我如何设计这些卡片,以便在点击时打开指向新页面的链接?
- javascript - 在 Flutter 中使用 Html 和 Javascript
- splash-screen - 如何在 yocto 中加载用户空间之前显示引导屏幕
- apache-spark - 是否可以使用 mapgroupwithstate 作为滑动窗口