java – 使用lambda保持线程安全
发布时间:2020-12-14 23:55:20 所属栏目:Java 来源:网络整理
导读:我正在尝试更新一些代码以使用lambda表达式但我在保持线程安全方面遇到了一些麻烦. 我有多个线程运行,最终调用以下回调,它有一个synchronized方法,将一些结果添加到LinkedList. final ListDocument mappedDocs = new LinkedList();final MapCallbackInteger,
我正在尝试更新一些代码以使用lambda表达式但我在保持线程安全方面遇到了一些麻烦.
我有多个线程运行,最终调用以下回调,它有一个synchronized方法,将一些结果添加到LinkedList. final List<Document> mappedDocs = new LinkedList<>(); final MapCallback<Integer,Document> mapCallback = new MapCallback<Integer,Document>() { @Override public synchronized void done(int file,List<Document> results) { mappedDocs.addAll(results); } }; 但是,当我将它转换为lambda表达式时,我丢失了synchronized关键字,我不完全确定如何将其恢复.每当我运行代码时,我现在都会收到NullPointerException. final MapCallback<Integer,Document> mapCallback = (int file,List<Document> results) -> mappedDocs.addAll(results); 如何让这个线程再次安全? 解决方法
您可以在不同的监视器上同步它,例如:
final MapCallback<Integer,List<Document> results) -> { synchronized(mappedDocs) { mappedDocs.addAll(results); } }; 或者使用线程安全结构,例如CopyOnWriteArrayList或BlockingQueue. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容