与这个问题一样,我想知道为什么Java团队没有为Lock接口添加一些默认方法,如下所示:
public default void withLock(Runnable r) { lock(); try { r.run(); } finally { unlock(); } }
这将允许程序员这样做
public class ThreadSafe { // Object requiring protection private final Listl = new ArrayList<>(); private final Lock lock = new ReentrantLock(); public void mutate(String s) { lock.withLock(() -> l.add(s)); } public void threadSafeMethod { lock.withLock(() -> { System.out.println(l.get(l.size())); }); } }
代替
public void threadSafeMethod { lock.lock(); try { System.out.println(l.get(l.size())); } finally { lock.unlock(); } }
rxg.. 6
似乎这个问题的答案类似于相关问题的答案- 由于Runnable
lambda创建的分配成本(参见Brian Goetz对请求的回应),它被视为"有吸引力的滋扰" .
好消息是这个请求有一个开放的错误,这意味着一旦JVM可以可靠地最小化分配成本,Oracle似乎愿意重新审视这个决定.
似乎这个问题的答案类似于相关问题的答案- 由于Runnable
lambda创建的分配成本(参见Brian Goetz对请求的回应),它被视为"有吸引力的滋扰" .
好消息是这个请求有一个开放的错误,这意味着一旦JVM可以可靠地最小化分配成本,Oracle似乎愿意重新审视这个决定.