当前位置: 首页 > news >正文

泰安整站优化wordpress头部空白

泰安整站优化,wordpress头部空白,自己网站做访问统计代码,做网站除了域名还用什么JUC(Java Util Concurrent) 是 Java 并发编程的核心工具包,提供高性能、线程安全的并发控制组件。自 Java 5 引入,它彻底改变了 Java 多线程开发模式,解决了传统 synchronized 和 wait()/notify() 的局限性。 核心组件…

JUC(Java Util Concurrent) 是 Java 并发编程的核心工具包,提供高性能、线程安全的并发控制组件。自 Java 5 引入,它彻底改变了 Java 多线程开发模式,解决了传统 synchronizedwait()/notify() 的局限性。


核心组件概览

类别核心类/接口作用
原子操作类AtomicInteger, LongAdder无锁线程安全计算
锁机制ReentrantLock, StampedLock替代 synchronized 的显式锁
并发集合ConcurrentHashMap, CopyOnWriteArrayList高性能线程安全容器
线程池ThreadPoolExecutor, ForkJoinPool线程资源管理
同步工具CountDownLatch, CyclicBarrier多线程协调
异步编程CompletableFuture响应式编程支持

一、原子操作类(java.util.concurrent.atomic

解决非阻塞算法实现,性能远超 synchronized

典型使用
// 原子计数器
AtomicInteger counter = new AtomicInteger(0);// 并发递增
IntStream.range(0, 100).parallel().forEach(i -> {counter.incrementAndGet();  // 无锁线程安全操作
});
核心类:
  • 基础类型
    AtomicInteger, AtomicLong, AtomicBoolean
  • 引用类型
    AtomicReference<User>, AtomicStampedReference(解决ABA问题)
  • 累加器(Java 8+)
    LongAdder(比 AtomicLong 更高并发性能)

二、锁机制(java.util.concurrent.locks

1. ReentrantLock(可重入锁)
Lock lock = new ReentrantLock();void safeIncrement() {lock.lock();  // 显式加锁try {count++;} finally {lock.unlock(); // 必须finally释放}
}

优势

  • 可中断锁:lockInterruptibly()
  • 尝试获取锁:tryLock(1, TimeUnit.SECONDS)
  • 公平锁模式:new ReentrantLock(true)
2. ReadWriteLock(读写锁)
ReadWriteLock rwLock = new ReentrantReadWriteLock();
Lock readLock = rwLock.readLock();  // 共享读锁
Lock writeLock = rwLock.writeLock(); // 独占写锁
3. StampedLock(Java 8 优化锁)
StampedLock lock = new StampedLock();// 乐观读(无锁尝试)
long stamp = lock.tryOptimisticRead();
if (!lock.validate(stamp)) {stamp = lock.readLock();  // 升级为悲观读try { /* 读取操作 */ } finally { lock.unlockRead(stamp); }
}

三、并发集合

1. ConcurrentHashMap
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();// 线程安全的putIfAbsent
map.computeIfAbsent("key", k -> 1);// 并行操作(Java 8+)
map.forEach(2, (k, v) -> System.out.println(k + ":" + v));

特点

  • 分段锁(JDK 7)→ CAS + 红黑树(JDK 8+)
  • 高并发下性能接近单线程 HashMap
2. 阻塞队列
队列类型特性
ArrayBlockingQueue有界数组队列
LinkedBlockingQueue无界/有界链表队列(默认Integer.MAX_VALUE)
PriorityBlockingQueue优先级阻塞队列
SynchronousQueue无缓冲队列(生产消费必须配对)
// 生产者-消费者模式
BlockingQueue<Task> queue = new ArrayBlockingQueue<>(10);// 生产者
queue.put(task);  // 阻塞直到空间可用// 消费者
Task task = queue.take(); // 阻塞直到元素可用

四、线程池(java.util.concurrent

1. ThreadPoolExecutor
ExecutorService executor = new ThreadPoolExecutor(4,      // 核心线程数10,     // 最大线程数60,     // 空闲线程存活时间(秒)TimeUnit.SECONDS,new ArrayBlockingQueue<>(100), // 工作队列new ThreadFactoryBuilder().setNameFormat("worker-%d").build(),new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
2. Executors 工厂方法
// 固定线程池
ExecutorService fixedPool = Executors.newFixedThreadPool(4);// 工作窃取池(Java 7+)
ExecutorService workStealingPool = Executors.newWorkStealingPool();// 定时任务池
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);

五、同步工具类

1. CountDownLatch(倒计时门闩)
CountDownLatch latch = new CountDownLatch(3);// 多个线程完成任务
executor.execute(() -> {doWork();latch.countDown();  // 计数器-1
});latch.await();  // 阻塞直到计数器归零
System.out.println("All tasks completed");
2. CyclicBarrier(循环屏障)
CyclicBarrier barrier = new CyclicBarrier(3, () -> {System.out.println("All threads reached barrier");
});IntStream.range(0, 3).forEach(i -> executor.execute(() -> {prepareWork();barrier.await();  // 等待其他线程continueWork();
}));
3. Semaphore(信号量)
Semaphore semaphore = new Semaphore(3); // 允许3个并发void accessResource() {semaphore.acquire();  // 获取许可try {useResource();} finally {semaphore.release(); // 释放许可}
}

六、异步编程(CompletableFuture,Java 8+)

CompletableFuture.supplyAsync(() -> fetchData())   // 异步任务.thenApply(data -> transform(data))           // 同步转换.thenAcceptAsync(result -> save(result), ioPool) // 异步消费.exceptionally(ex -> handleError(ex));         // 异常处理

核心操作

  • 组合:thenCompose(), thenCombine()
  • 并行:allOf(), anyOf()
  • 超时控制:orTimeout(), completeOnTimeout()(Java 9+)

JUC 设计哲学

  1. 降低锁粒度
    分段锁(ConcurrentHashMap)、读写分离(ReadWriteLock)
  2. 无锁化编程
    CAS 操作(AtomicXXX)、LongAdder
  3. 线程资源复用
    线程池机制避免频繁创建/销毁
  4. 协调而非阻塞
    CountDownLatch/CyclicBarrier 替代 wait/notify

最佳实践

  1. 优先使用并发集合
    替代 Collections.synchronizedXXX()
  2. 线程池资源管理
    禁止使用 Executors.newCachedThreadPool()(易致 OOM)
  3. 锁使用规范
    Lock lock = ...;
    lock.lock();
    try { /* 临界区 */ } 
    finally { lock.unlock(); }  // 必须finally释放
    
  4. 异步编程陷阱
    CompletableFuture 回调链需处理异常

性能对比(示例)

操作synchronizedReentrantLockAtomicLong
1000万次递增 (4线程)1200 ms850 ms210 ms
内存占用
可中断性不支持支持不适用

测试环境:JDK 17, Apple M1 Pro


学习路线

  1. 基础AtomicIntegerReentrantLockConcurrentHashMap
  2. 进阶ThreadPoolExecutorCountDownLatchCompletableFuture
  3. 高级ForkJoinPoolStampedLockPhaser(阶段同步器)

推荐资源

  • 《Java Concurrency in Practice》(并发编程圣经)
  • JUC 源码(Doug Lea 大师之作)
  • Java 官方并发教程:Oracle Concurrency

重要提示:JUC 解决了并发难题,但也引入新复杂度。务必通过 jstackVisualVM 等工具分析线程状态,避免死锁和资源耗尽。

http://www.dtcms.com/a/428572.html

相关文章:

  • 考研408之栈与队列学习
  • 软考-系统架构设计师 软件架构概念详细讲解
  • 都匀网站建设住建部注册中心官网
  • Problem: lab-week4- exercise02 Quick sort
  • 营销型网站策划怎么做中国公司查询网站
  • 通信领域常见基本概念与术语
  • Trae CN配置Maven环境
  • 门户网站改版计算机网页设计就业方向
  • 无锡网站设计哪家公司好长春火车站照片
  • 石油钻井为何离不开抗高温抗冲击的石英加速度计?
  • matlab | 基于MATLAB的抽烟识别系统设计:技术框架与实现路径
  • 时间序列 + SHAP/LIME,实现可解释性再突破!
  • 宿迁建设企业网站淘宝接单做网站
  • ACM Comput. Surv.投稿
  • 网站产品分类设计百度做销售网站多少钱
  • 延安免费做网站公司温州网站推广外包
  • 产业资源+金融赋能!沃飞长空与金石租赁开启深度合作
  • 大余网站app的开发需要多少钱
  • 做网站要到通信管理局备案专业俄文网站建设
  • 苏州电信网站备案泉州市亿民建设发展有限公司网站
  • 新天力:为食品安全而生的食品容器专家
  • 程序员创业注意事项
  • 沃尔沃XC70正式上市,积极布局混插市场的沃尔沃未来何在?
  • 使用lombok的sl4j注解,报错java: 找不到符号 符号: 变量 log
  • 廊坊网站建设搭建wordpress页面管理
  • 26.渗透-.Linux基础命令(十八)-Linux系统状态管理(安全加固-查找空密码账号)
  • 山西网站推婚纱摄影网站的设计与实现
  • 专业直播信号源技术解析:从基础配置到商业解决方案
  • 人物设计网站贵阳网站备案在哪里
  • 学习日报 20250930|多优惠券叠加核销及场景互斥逻辑