多线程
文章平均质量分 91
一棵___大树
技术学习分享欢迎交流,个人主页https://www.abigtree.top/,Github主页https://github.com/A-BigTree
展开
-
【Java多线程】8——CompletableFuture
在Future接口下,我们只能通过调用get()方法来获取任务计算结果,但是只要目标任务没有执行完,get()方法会被阻塞——阻塞方式又回到了同步调用,这就和异步操作的初衷相违背了。从实现类的版本情况能看出,原创 2024-03-30 19:19:46 · 429 阅读 · 0 评论 -
【Java多线程】7——阻塞队列&线程池
在《阿里巴巴Java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显式的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。同时线程池不允许使用Executors去创建,而要通过方式,这一方面是由于JDK 中 Executor 框架虽然提供了如等创建线程池的方法,但都有其局限性,不够灵活;使用有助于大家明确线程池的运行规则,创建符合自己的业务场景需要的线程池,避免资源耗尽的风险。原创 2024-03-30 19:16:46 · 929 阅读 · 0 评论 -
【Java多线程】6——集合线程安全
写时复制、锁分段技术原创 2024-03-29 16:16:43 · 332 阅读 · 0 评论 -
【Java多线程】5——Lock底层原理
根据类的名字抽象的队列式同步器。AQS 定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它。它维护了一个(代表共享资源)和一个 FIFO 线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里 volatile 是核心关键词。getState()setState()Exclusive(独占,只有一个线程能执行)Share(共享,多个线程可同时执行)不同的自定义同步器争用共享资源的方式也不同。原创 2024-03-29 16:12:39 · 972 阅读 · 0 评论 -
【Java多线程】4——特定场景解决办法
使用 Fork Join 框架能够帮助我们把一个大型任务,根据一定规律,拆分成小任务执行。如果拆分后的任务还不够小,可以以递归模式继续拆分,直到拆分到可以执行的程度。然后再把各个子任务执行的结果汇总到一起。Fork:拆分:把大任务拆分成小任务。Join:合并:把小任务执行的结果合并到一起。我们使用 Fork Join 框架只需要继承 RecursiveTask,然后重写 compute() 方法即可。任务拆分的逻辑任务拆分的操作:调用 fork() 方法。原创 2024-03-28 14:54:30 · 902 阅读 · 0 评论 -
【Java多线程】3——Lock API控制多线程
在实际场景中,读操作不会改变数据,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。针对这种场景,Java 的并发包提供了读写锁,它表示两个锁,一个是读操作相关的锁,称为读锁,这是一种共享锁;一个是写相关的锁,称为写锁,这是一种排他锁,也叫独占锁、互斥锁。原创 2024-03-28 14:37:51 · 911 阅读 · 0 评论 -
【Java多线程】2——synchronized底层原理
为了减少获得锁和释放锁带来的性能消耗,引入了『偏向锁』和『轻量级锁』的概念。升级后锁一共有 4 种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。原创 2024-03-27 19:40:37 · 1155 阅读 · 0 评论 -
【Java多线程】1——多线程知识回顾
在一个进程中,需要同时处理多个不同任务,每一个任务由一个线程来执行。从这个意义上来说,可以把进程看做是线程的容器。原创 2024-03-27 19:31:55 · 790 阅读 · 0 评论