如何在以下 lambda exp 中添加同步?

Posted

技术标签:

【中文标题】如何在以下 lambda exp 中添加同步?【英文标题】:how to add synchronization in following lambda exp? 【发布时间】:2021-12-25 16:23:32 【问题描述】:
   
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 表达式编写的代码块。关于以下代码 sn -p :

【问题讨论】:

您忘记添加代码 sn-p。 【参考方案1】:

可以在 Java Lambda 表达式和匿名类中使用同步块。

注意:您忘记添加代码 sn-p,因为您的代码中没有代码 sn-p 可见,所以我会添加自己的代码 sn-p 以明确我的观点。

    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();
  

【讨论】:

非常感谢兄弟,我得到了一切。 不客气@TanmayMandaogane

以上是关于如何在以下 lambda exp 中添加同步?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将 lambda 与方法一起使用?

“exp: command not found” 如何将 expo cli 添加到路径?

如何在横函数中添加lambda表达式?

如何使用 lambda 表达式将 DataTable 记录添加到列表中? [复制]

如何将 lambda 函数分解为自己的函数? (Lambda 目前超过 125 个字符)

如何标准化直方图