JAVA多线程重入锁ReentrantLock应用
package concurrent;import java.util.concurrent.*;import java.util.concurrent.locks.ReentrantLock;/** * @Auther:zhl * @Date:2019/7/13 * @Description: 并发测试,重入锁ReentrantLock解决并发问题 */public class ConcurrentSample { //并发线程数量 private static int users = 100; //访问次数 private static int count = 10000; //访问总量 private static int number = 0; //private static CyclicBarrier cyclicBarrier = new CyclicBarrier(10000); private static ReentrantLock reentrantLock = new ReentrantLock(); public static void main(String[] args) throws InterruptedException { //定义线程池 ExecutorService executorService = Executors.newCachedThreadPool(); //并发量 //Semaphore semaphore = new Semaphore(users); CountDownLatch countDownLatch = new CountDownLatch(count); for (int i = 0; i < count; i++) { executorService.execute(() -> { try { //semaphore.acquire(); add(); countDownLatch.countDown(); //semaphore.release(); } catch (Exception e) { e.printStackTrace(); } }); } countDownLatch.await(); executorService.shutdown(); System.out.println("计数器:" + number); } public static void add() { //加锁 reentrantLock.lock(); number++; //解锁 reentrantLock.unlock(); }}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。