{ 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"); }
Can synchronized blocks be used for some of the code blocks written in lambda expression . With respect to the following code snippet :
Advertisement
Answer
It is possible to use synchronized blocks inside a Java Lambda Expression and inside anonymous classes.
Note: You have forgotten to add code snippet as no code snippet is visible in your code , So I ma adding my own code snippet to make clear my point.
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(); } }