#java #multithreading #list #lambda #synchronization
Вопрос:
{ Listlt;Integergt; list = new ArrayListlt;gt;(10000); IntStream.range(1, 10000).forEach(list::add); Thread reader = new Thread(() -gt; { list.forEach(i -gt; System.out.println("r " i)); }, "t1"); }
Могут ли синхронизированные блоки использоваться для некоторых блоков кода, написанных в лямбда-выражении . В отношении следующего фрагмента кода :
Комментарии:
1. Вы забыли добавить фрагмент кода.
Ответ №1:
Можно использовать синхронизированные блоки внутри лямбда-выражения Java и внутри анонимных классов.
Примечание: Вы забыли добавить фрагмент кода , так как в вашем коде не видно фрагмента кода, поэтому я добавляю свой собственный фрагмент кода, чтобы прояснить свою точку зрения.
import java.util.function.Consumer; public class SynchronizedExample { public static void main(String[] args) { Consumerlt;Stringgt; func = (String param) -gt; { 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(() -gt; { func.accept("Parameter"); }, "Thread 1"); Thread thread2 = new Thread(() -gt; { func.accept("Parameter"); }, "Thread 2"); thread1.start(); thread2.start(); } }
Комментарии:
1. большое тебе спасибо, брат, у Меня все есть.
2. добро пожаловать @TanmayMandaogane