首页 > 解决方案 > 如何在以下 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 表达式编写的代码块。关于以下代码片段:

标签: javamultithreadinglistlambdasynchronization

解决方案


可以在 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();
  }
}

推荐阅读