![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
有抱负的小狮子
厚积薄发
展开
-
并发编程(五)常见并发工具的基本原理分析
Condition在前面学习 synchronized 的时候,有讲到 wait/notify 的基本使用,结合 synchronized 可以实现对线程的通信。那么这个时候我就在思考了,既然 J.U.C 里面提供了锁的实现机制,那 J.U.C 里面有没有提供类似的线程通信的工具呢?于是找阿找,发现了一个 Condition 工具类。Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒Condition 的基本使用Con原创 2020-08-03 19:25:05 · 2674 阅读 · 0 评论 -
并发编程(四)AQS的底层原理分析
J.U.C 简介Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中,回去剖析一些经典的比较常用的组件的设计思想LockLock 在 J.U.C 中是最核心的组件,前面我们讲 synchronized 的时候说过,锁最重要的特性就是解决并发安全问题。为什么要以 Lock 作为切入点呢?如果有同学看过 J.U.C 包中的所有组件原创 2020-07-28 23:43:44 · 3035 阅读 · 1 评论 -
并发编程(三)多线程基础和原理(volatile关键字)
初步认识 Volatile一段代码引发的思考下面这段代码,演示了一个使用 volatile 以及没使用 volatile这个关键字,对于变量更新的影响public class App { public /*volatile*/ static boolean stop=false; public static void main( String[] args ) throws InterruptedException { Thread t1=new Thread((原创 2020-07-21 01:22:28 · 2429 阅读 · 0 评论 -
并发编程(二)多线程基础和原理(synchronized关键字)
由一个问题引发的思考线程的合理使用能够提升程序的处理性能,主要有两个方面,第一个是能够利用多核 cpu 以及超线程技术来实现线程的并行执行;第二个是线程的异步化执行相比于同步执行来说,异步执行能够很好的优化程序的处理性能提升并发吞吐量同时,也带来了很多麻烦,举个简单的例子多线程对于共享变量访问带来的安全性问题一个变量 i. 假如一个线程去访问这个变量进行修改,这个时候对于数据的修改和访问没有任何问题。但是如果多个线程对于这同一个变量进行修改,就会存在一个数据安全性问题对于线程安全性,本质上是管理对原创 2020-07-20 15:30:43 · 2632 阅读 · 0 评论 -
并发编程(一)多线程基础和原理
多线程基础 最近,准备回顾下多线程相关的知识体系,顺便在这里做个记录。并发的发展历史最早的计算机只能解决简单的数学运算问题,比如正弦、 余弦等。运行方式:程序员首先把程序写到纸上,然后穿 孔成卡片,再把卡片盒带入到专门的输入室。输入室会有 专门的操作员将卡片的程序输入到计算机上。计算机运行 完当前的任务以后,把计算结果从打印机上进行输出,操 作员再把打印出来的结果送入到输出室,程序员就可以从 输出室取到结果。然后,操作员再继续从已经送入到输入 室的卡片盒中读入另一个任务重复上述的步骤。操作员在机原创 2020-07-19 01:44:02 · 4217 阅读 · 0 评论 -
深入浅出java线程池
线程池的概念线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL,ElasticSearch等等线程池解决的核心问题就是资源管理问题。在并发环境下,系统不能够确定在任意时刻中,有多少任务需要执行,有多少资源需要投入。这种不确定性将带来以下若干问题:频繁申请/销毁资源和调度资源,将带来额外的消耗,可能会非常巨大。对资源无限申请缺少抑制手段,易引发系统资源耗尽的风险。系统无法合理管理内部的资源分布,会降低系统的稳定性。为解决资源分配这个问题,线原创 2020-07-15 01:13:26 · 6023 阅读 · 0 评论