如何在以下 lambda exp 中添加同步?
how to add synchronization in following 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表达式编写的代码块可以使用synchronized块吗?关于以下代码片段:
可以在 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();
}
}
{
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表达式编写的代码块可以使用synchronized块吗?关于以下代码片段:
可以在 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();
}
}