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

网站公司备案有用网站建设链接

网站公司备案有用,网站建设链接,建设大学网站费用,html大作业网页代码一、为什么引入JUC Java 并发工具包#xff08;java.util.concurrent#xff0c;简称 JUC#xff09;的引入是为了解决多线程编程中的复杂性、性能瓶颈和安全性问题。在原生 Java 线程模型#xff08;Thread、synchronized、wait/notify#xff09;基础上#xff0c;JUC…一、为什么引入JUC Java 并发工具包java.util.concurrent简称 JUC的引入是为了解决多线程编程中的复杂性、性能瓶颈和安全性问题。在原生 Java 线程模型Thread、synchronized、wait/notify基础上JUC 提供了更高效、更灵活的工具核心解决以下关键问题 1. 原生同步机制的局限性 synchronized 性能问题 原生 synchronized 是重量级锁在竞争激烈时会导致线程频繁挂起/唤醒引发上下文切换开销。JUC 提供了可重入锁ReentrantLock支持 非阻塞尝试获取锁tryLock()可中断锁lockInterruptibly()公平锁选项减少线程饥饿更细粒度的锁控制配合 Condition 实现多条件等待。 wait/notify 难以维护 在多条件等待场景中如生产者-消费者wait/notify 易引发错误如虚假唤醒。JUC 的 Condition 接口 支持多条件队列简化复杂同步逻辑。 2. 线程安全容器的性能瓶颈 Collections.synchronizedXXX 效率低 通过同步包装的集合如 synchronizedList使用粗粒度锁所有操作串行化。JUC 提供了高性能并发容器 ConcurrentHashMap分段锁/无锁 CAS 实现高并发读/写。CopyOnWriteArrayList读无锁写时复制适合读多写少。BlockingQueue如 ArrayBlockingQueue, LinkedBlockingQueue线程安全的阻塞队列简化生产者-消费者模型。 3. 复杂并发任务的协作困难 原生线程 API 难以协调多线程任务JUC 提供以下工具 CountDownLatch 让主线程等待多个子任务完成如启动初始化。CyclicBarrier 让一组线程相互等待直到所有线程到达屏障点如多阶段计算。Semaphore 控制同时访问资源的线程数如限流。Phaser 更灵活的分阶段屏障替代 CountDownLatch 和 CyclicBarrier。 4. 线程池管理的复杂性 原生 Thread 开销大 频繁创建/销毁线程消耗资源。JUC 提供 Executor 框架 线程池ThreadPoolExecutor, ScheduledThreadPoolExecutor复用线程资源。支持任务提交submit()、生命周期管理、拒绝策略等。避免手动管理线程。 5. 原子操作的实现成本 volatile 不够灵活 volatile 只保证可见性不保证复合操作原子性。JUC 的 atomic 包如 AtomicInteger, AtomicReference通过 CAS无锁算法 实现高效原子操作避免锁开销。 6. 避免死锁和提高可扩展性 锁分离与无锁算法 如 ConcurrentHashMap 分段锁减少竞争CopyOnWriteArrayList 读操作无锁提升高并发场景性能。非阻塞数据结构 例如 ConcurrentLinkedQueue 使用 CAS 实现无锁队列避免死锁。 代码示例对比 原生 synchronized vs ReentrantLock // 原生 synchronized synchronized(lock) {while (!condition) lock.wait();// 操作资源lock.notifyAll(); }// JUC ReentrantLock Condition lock.lock(); try {while (!condition) condition.await();// 操作资源condition.signal(); } finally {lock.unlock(); }ReentrantLock 支持超时、中断且 Condition 可细分等待条件如生产者/消费者独立队列。 二、JUC 工具包核心组件 1. Lock 框架 (java.util.concurrent.locks) #mermaid-svg-q9Bpeb0LQwB39b6M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-q9Bpeb0LQwB39b6M .error-icon{fill:#552222;}#mermaid-svg-q9Bpeb0LQwB39b6M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-q9Bpeb0LQwB39b6M .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-q9Bpeb0LQwB39b6M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-q9Bpeb0LQwB39b6M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-q9Bpeb0LQwB39b6M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-q9Bpeb0LQwB39b6M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-q9Bpeb0LQwB39b6M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-q9Bpeb0LQwB39b6M .marker.cross{stroke:#333333;}#mermaid-svg-q9Bpeb0LQwB39b6M svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-q9Bpeb0LQwB39b6M g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-q9Bpeb0LQwB39b6M g.classGroup text .title{font-weight:bolder;}#mermaid-svg-q9Bpeb0LQwB39b6M .nodeLabel,#mermaid-svg-q9Bpeb0LQwB39b6M .edgeLabel{color:#131300;}#mermaid-svg-q9Bpeb0LQwB39b6M .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-q9Bpeb0LQwB39b6M .label text{fill:#131300;}#mermaid-svg-q9Bpeb0LQwB39b6M .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-q9Bpeb0LQwB39b6M .classTitle{font-weight:bolder;}#mermaid-svg-q9Bpeb0LQwB39b6M .node rect,#mermaid-svg-q9Bpeb0LQwB39b6M .node circle,#mermaid-svg-q9Bpeb0LQwB39b6M .node ellipse,#mermaid-svg-q9Bpeb0LQwB39b6M .node polygon,#mermaid-svg-q9Bpeb0LQwB39b6M .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-q9Bpeb0LQwB39b6M .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-q9Bpeb0LQwB39b6M g.clickable{cursor:pointer;}#mermaid-svg-q9Bpeb0LQwB39b6M g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-q9Bpeb0LQwB39b6M g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-q9Bpeb0LQwB39b6M .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-q9Bpeb0LQwB39b6M .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-q9Bpeb0LQwB39b6M .dashed-line{stroke-dasharray:3;}#mermaid-svg-q9Bpeb0LQwB39b6M #compositionStart,#mermaid-svg-q9Bpeb0LQwB39b6M .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #compositionEnd,#mermaid-svg-q9Bpeb0LQwB39b6M .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #dependencyStart,#mermaid-svg-q9Bpeb0LQwB39b6M .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #dependencyStart,#mermaid-svg-q9Bpeb0LQwB39b6M .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #extensionStart,#mermaid-svg-q9Bpeb0LQwB39b6M .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #extensionEnd,#mermaid-svg-q9Bpeb0LQwB39b6M .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #aggregationStart,#mermaid-svg-q9Bpeb0LQwB39b6M .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M #aggregationEnd,#mermaid-svg-q9Bpeb0LQwB39b6M .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-q9Bpeb0LQwB39b6M .edgeTerminals{font-size:11px;}#mermaid-svg-q9Bpeb0LQwB39b6M :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Lock ReentrantLock AbstractQueuedSynchronizer Sync NonfairSync FairSync Condition ReentrantLock Lock lock new ReentrantLock(true); // 公平锁 lock.lockInterruptibly(); // 可中断获取锁 try {// 临界区 } finally {lock.unlock(); }ReadWriteLock ReentrantReadWriteLock rwLock new ReentrantReadWriteLock(); rwLock.readLock().lock(); // 读锁共享 rwLock.writeLock().lock(); // 写锁排他Condition Condition condition lock.newCondition(); condition.await(1, TimeUnit.SECONDS); // 超时等待 condition.signal(); // 唤醒线程2. 原子类 (java.util.concurrent.atomic) 实现原理CAS (Unsafe.compareAndSwapXXX)// HotSpot 源码片段 (atomic.cpp) jbyte Atomic::cmpxchg(jbyte exchange_value, volatile jbyte* dest...) {return __sync_val_compare_and_swap(dest, compare_value, exchange_value); }示例AtomicInteger atomicInt new AtomicInteger(); atomicInt.updateAndGet(x - x * 2); // 原子更新// LongAdder 分段计数优化高并发 LongAdder adder new LongAdder(); adder.add(10);3. 并发容器 容器类特性实现原理ConcurrentHashMap分段锁/CASsynchronizedJDK8: Node数组链表/红黑树CopyOnWriteArrayList写时复制写操作加锁复制新数组ConcurrentLinkedQueue无锁队列CAS更新头尾节点BlockingQueue阻塞操作Condition等待队列 // ConcurrentHashMap 使用示例 ConcurrentMapString, Integer map new ConcurrentHashMap(); map.computeIfAbsent(key, k - 1); // 原子操作4. 同步工具类 CountDownLatch一次性屏障 CountDownLatch latch new CountDownLatch(3); latch.await(); // 主线程等待 latch.countDown(); // 任务线程完成CyclicBarrier可重用栅栏 CyclicBarrier barrier new CyclicBarrier(5, () - System.out.println(All threads arrived)); barrier.await(); // 线程同步点Semaphore资源许可证 Semaphore sem new Semaphore(5); // 资源池容量 sem.acquire(); // 获取许可 sem.release(); // 释放许可Exchanger线程间数据交换 ExchangerString exchanger new Exchanger(); String data exchanger.exchange(Data); // 阻塞等待交换5. 线程池框架 #mermaid-svg-jba4MqJPccGuLRz2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jba4MqJPccGuLRz2 .error-icon{fill:#552222;}#mermaid-svg-jba4MqJPccGuLRz2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jba4MqJPccGuLRz2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jba4MqJPccGuLRz2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jba4MqJPccGuLRz2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jba4MqJPccGuLRz2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jba4MqJPccGuLRz2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jba4MqJPccGuLRz2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jba4MqJPccGuLRz2 .marker.cross{stroke:#333333;}#mermaid-svg-jba4MqJPccGuLRz2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jba4MqJPccGuLRz2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jba4MqJPccGuLRz2 .cluster-label text{fill:#333;}#mermaid-svg-jba4MqJPccGuLRz2 .cluster-label span{color:#333;}#mermaid-svg-jba4MqJPccGuLRz2 .label text,#mermaid-svg-jba4MqJPccGuLRz2 span{fill:#333;color:#333;}#mermaid-svg-jba4MqJPccGuLRz2 .node rect,#mermaid-svg-jba4MqJPccGuLRz2 .node circle,#mermaid-svg-jba4MqJPccGuLRz2 .node ellipse,#mermaid-svg-jba4MqJPccGuLRz2 .node polygon,#mermaid-svg-jba4MqJPccGuLRz2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jba4MqJPccGuLRz2 .node .label{text-align:center;}#mermaid-svg-jba4MqJPccGuLRz2 .node.clickable{cursor:pointer;}#mermaid-svg-jba4MqJPccGuLRz2 .arrowheadPath{fill:#333333;}#mermaid-svg-jba4MqJPccGuLRz2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jba4MqJPccGuLRz2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jba4MqJPccGuLRz2 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jba4MqJPccGuLRz2 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jba4MqJPccGuLRz2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jba4MqJPccGuLRz2 .cluster text{fill:#333;}#mermaid-svg-jba4MqJPccGuLRz2 .cluster span{color:#333;}#mermaid-svg-jba4MqJPccGuLRz2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jba4MqJPccGuLRz2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Executor ExecutorService AbstractExecutorService ThreadPoolExecutor ScheduledExecutorService 核心参数 new ThreadPoolExecutor(corePoolSize, // 核心线程数maxPoolSize, // 最大线程数keepAliveTime, // 空闲线程存活时间TimeUnit.SECONDS,new LinkedBlockingQueue(100), // 工作队列new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 )ForkJoinPool 工作窃取算法 class FibTask extends RecursiveTaskInteger {protected Integer compute() {if (n 1) return n;FibTask f1 new FibTask(n-1);f1.fork(); // 拆分子任务return f2.compute() f1.join();} }三、深入源码解析 1. AQS (AbstractQueuedSynchronizer) 机制 // ReentrantLock 获取锁源码片段 final boolean nonfairTryAcquire(int acquires) {if (compareAndSetState(0, 1)) { // CAS尝试设置statesetExclusiveOwnerThread(current);return true;}return false; }// 等待队列入队操作 (CLH队列) private Node enq(Node node) {for (;;) {Node t tail;if (t null) // 初始化队列if (compareAndSetHead(new Node()))tail head;else {node.prev t;if (compareAndSetTail(t, node)) {t.next node;return t;}}} }2. ConcurrentHashMap 扩容设计 // 扩容时数据迁移 (transfer方法) while (nextTab ! null transferIndex 0) {synchronized (f) { // 锁住桶头节点// 将链表/树拆分成高位和低位链表if (fh 0) {NodeK,V loHead null, loTail null;NodeK,V hiHead null, hiTail null;// ...数据迁移操作...}} }3. FutureTask 状态机 // FutureTask 状态转换 private static final int NEW 0; // 新建 private static final int COMPLETING 1; // 执行中 private static final int NORMAL 2; // 正常结束 private static final int EXCEPTIONAL 3; // 异常结束 private static final int CANCELLED 4; // 已取消 private static final int INTERRUPTING 5; // 中断中 private static final int INTERRUPTED 6; // 已中断四、高级特性与最佳实践 避免死锁的技巧 锁排序按固定顺序获取锁使用 tryLock() 带超时机制 if (lock1.tryLock(1, SECONDS)) {try {if (lock2.tryLock(1, SECONDS)) {try { /* 业务操作 */ } finally { lock2.unlock(); }}} finally { lock1.unlock(); } }JMMJava Memory Model原则 Happens-Before 规则 程序顺序规则volatile变量规则传递性规则 性能优化 用 LongAdder 替代 AtomicLong 高并发计数避免锁升级优先用 volatile CASConcurrentHashMap.size() vs mappingCount() 五、Java 并发发展 Java 19 虚拟线程Virtual ThreadsJava 21 结构化并发Project Loom 的协程实现 学习路径建议 掌握基础锁机制 → 2. 熟练使用 JUC 工具类 → 3. 阅读源码理解原理 → 4. 通过 Arthas 等工具实战调试 → 5. 学习性能调优方案 六、总结 JUC 的核心价值 提升性能通过无锁算法CAS、细粒度锁、并发容器减少竞争。简化复杂性标准化工具如线程池、BlockingQueue替代手写复杂同步逻辑。增强安全性避免死锁、竞争条件提供更可靠的线程协作机制。可扩展性支持高并发场景如百万级连接的服务端。 理解并发工具包需要结合底层硬件知识CPU缓存、内存屏障和操作系统原理线程调度、同步原语通过工具包源码的学习能帮助开发者编写高性能、线程安全的并发程序。
http://www.hkea.cn/news/14474512/

相关文章:

  • 免费图标下载网站常见的简单的营销软件
  • eclipse怎么做网站怎么建个公司网站
  • 网站开发前台品牌线上营销策划
  • 企业如何对自己的网站进行建设电白网站开发公司
  • 域名备案 个人 网站基本信息查询wordpress 4.6漏洞
  • 自己做网站卖货多少钱免费企业注册
  • 免费个人搭建网站网络维护人员是做什么的
  • 如何自己做网站卖东西360网站怎么做ppt
  • 建设部建造师网站网站建设相关资料
  • 怎样做网站的优化wordpress文章回复
  • 建站之星网站 和服务器华夏思源培训机构官网
  • 网站建设有哪些项目国外常用的seo站长工具
  • 网址网站注册黔彩终端效果图
  • 甘肃城乡建设部网站首页外卖网站设计
  • 网站结构框架图怎么做wordpress代码如何运行安装
  • 郑州免费网站建设wordpress页面分栏
  • 医疗网站建设行情网页网站建设的ppt模板下载
  • 网站源码是啥网站建设是哪个专业
  • 做外贸的网站都有哪些平面设计素材免费
  • 豫港大厦 做网站seo推广顾问
  • 一键网站制作app云南网站建设公司
  • 大学校园网站建设网站开发是前端吗
  • 商务网站建设怎么建设商业网站
  • 包头建设厅官方网站兰州网络推广推广不了
  • seo优化有百度系和什么百度推广怎么优化
  • 那个网站可以做数学题赚钱关于公司做网站供比价报告
  • 做网站公司的出路做视频分享网站的参考书
  • 查网站是什么公司做的长沙网站建设网站
  • 湖南做门户网站的公司网站建设费怎么入账
  • 手机网站开发 速度wordpress仿百度