这是一道牛客网上的编程题。
昨天接到一个活,让我把项目中各个过程消耗的时间写到日志里。这个问题不困难,但是很麻烦。第一需要对项目的整个流程大致了解才行;第二需要修改的地方太多,需要在每个过程的开头开始计时,最后在结束后停止计时。经过一番修改,最终找到了一个还算不错的解决办法,且听我细细道来。
AQS是啥?这个先不管,ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch都靠它实现,没它不行。而且,你还可以用它来方便的实现自定义的同步器。什么?这么厉害,那当然要好好了解一下。
原文:https://www.cnblogs.com/handsomeye/p/5999362.html
说到同步,最先想到的肯定是synchronized关键字。在java.util.concurrent.locks包下提供了另一种同步方法,就是Lock。那么就很自然的产生如下疑问:为什么有了synchronized了还要有Lock呢?这两者的不同点在哪?优缺点又分别是什么?
为了解释这个问题,我们要先从synchronized的缺点说起。
牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w。 牛牛家里一共有n袋零食, 第i袋零食体积为v[i]。牛牛想知道在总体积不超过背包容量的情况下,他一共有多少种零食放法(总体积为0也算一种放法)。