![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 85
熊小哥~
小码农一个!
展开
-
啊!线程池原来也不是想象中那么可怕
前言当初熊某第一次接触数据库连接池的时候,简直是一脸懵逼!(令我想起一次在惠州罗浮山的天然游泳池上游泳的经历)连接对象我知道,还会有连接池?!生活中的一些事物都可以用到代码中吗?!顿时觉得我自己原来是那么渺小。后来得知是提前创建预先约定好的连接对象,然后放到一个容器上(可以是数组、队列或者其它),这样就能减少连接创建时间。那线程池也是同样的道理,在比较简单的程序下,你直接new Thread()也不会有什么大问题,毕竟在简单业务情况,创建和销毁线程的微小变化可以小到你都察觉不出来。可惜啊,在二十一原创 2020-06-28 17:12:32 · 260 阅读 · 0 评论 -
大佬,能给我讲讲什么是读写锁和锁的升级吗?
故事开端在一个阳光灿烂的早晨,熊某突然从别人的口中听到读写锁和锁的升级这个名词,脑海中第一反应就是——“What‘s this???”,锁还能分读写?锁还能升级?我的天,怎么感觉在升级打怪一样。于是熊某带着满头的疑虑去请求公司的技术大佬,这位技术大佬很耐心的给我说:"熊兄弟,并发编程没你想得那么简单的,下面让我一一为你道来。"于是,担起小板凳,拿着扇子马上开讲!何为“读写锁”?读写锁是一个很多地方都使用的技术,基本上实现读写锁都要遵循三个原则:允许多个线程同时读一个共享变量只能有一个线程对共原创 2020-06-17 16:27:52 · 536 阅读 · 0 评论 -
并发编程学习(9) ——Lock的初步使用以及分析
前言在并发编程学习(8) —— 管程的文章中介绍了管程,管程中最需要解决的问题是互斥和同步,而Lock就负责解决互斥问题,Condition就负责解决同步问题。但是,之前提到的synchronized也是一种管程的实现方式,那既然有了synchronized为什么还要再造Lock和Condition?在之前的并发编程学习(5) —— 如何解决死锁中提到过死锁这个问题,死锁的解决方法有三种:...原创 2020-06-11 17:12:15 · 282 阅读 · 0 评论 -
并发编程学习(8) —— 管程
什么是管程在之前我提到过管程这一概念,那管程到底是什么呢?管程其实指的是管理共享变量以及管理共享变量的操作过程。在并发领域中,最主要解决两个问题,第一个问题就是互斥,即同一时间只对一个共享变量继续操作。第二个问题就是同步,线程间如何通信、协调。管程解决互斥管程解决互斥问题相对简单,把共享变量以及共享变量的操作都封装在一个类中,如下图:管程互斥模型图当线程A和线程B需要获取共享...原创 2019-04-16 09:52:54 · 1500 阅读 · 1 评论 -
并发编程学习(7) —— 线程的生命周期
通常的线程生命周期在编程世界中,很多东西都有它的生命周期,都会经历“生老病死”,线程也是。线程一共有以下几种状态:初始状态、可运行状态、运行状态、休眠状态、终止状态。初始状态:线程已创建但还不被允许分配CPU。在操作系统上线程还没有真正的创建。可运行状态:线程可以分配CPU,同时意味着线程真正的创建成功。运行状态:当有空闲的CPU时,操作系统会将其分配给一个可运行状态下的线程,获得CP...原创 2019-04-03 12:41:12 · 203 阅读 · 0 评论 -
并发编程学习(6) —— 线程的安全问题、活跃问题和性能问题
并发编程中我们注意的方面有很多,但是最主要的还是这三个方面:安全性问题、活跃性问题、性能问题。安全性问题线程安全是什么?其实简单来说就是**线程能按照我们的期望来执行。**但是在并发编程中却没那么美好,在并发编程学习(2) —— 并发编程Bug源头中我们介绍了并发Bug的主要源头:可见性原子性有序性一般在存在共享变量并且该变量会改变,同时有至少一个线程写这个变量这种情况下才会考虑这...原创 2019-04-01 14:27:09 · 223 阅读 · 0 评论 -
并发编程学习(5) —— 如何解决死锁
前沿在并发编程学习(4) —— 互斥锁如何保护多个资源中讲述了入好保护关联资源以及不关联资源,但是里面的方法并不是最好,要想性能提高就要优化,但同样也会带来优化后的问题,接下来慢慢讨论。性能差的原因为了方便阅读,我这里贴上上一篇文章的保护关联资源的代码:public class Account { private int balance; // 余额 // 转账 v...原创 2019-03-24 15:09:18 · 193 阅读 · 0 评论 -
并发编程学习(3) —— 互斥锁解决原子性问题一
前言原子性是什么?在之前的文章提到过,当一个或多个操作在CPU执行过程中不被中断的特性就称为原子性。通常,发生原子性的问题是因为线程切换,线程切换依赖于CPU是否中断,那么解决方法很简单,直接禁止CPU发生中断就能阻止线程切换。这样的方法在单核的时代确实可以解决,因为同一时刻只能有一个线程在执行。但在多核时代的今天,很明显这种方法已经有点不适用了。一个线程在CPU-A中执行,一个在CPU-B...原创 2019-03-17 19:03:20 · 172 阅读 · 0 评论 -
并发编程学习(4) —— 互斥锁如何保护多个资源
前言原创 2019-03-20 21:45:10 · 261 阅读 · 0 评论 -
并发编程学习(1) —— 并发是什么
什么是并发CPU,内存,I/O三者之间读写的速度有很大的差异(CPU>>内存>>I/O),CPU的速度是远远大于内存和I/O,因此当CPU的指令执行完时,内存和I/O还在执行,这时CPU就出现空闲状态,效率低下。为了能够提高性能,就把执行的任务进行拆分多个片段,当等待某个片段执行完时,可以先处理其他未执行的片段。就好比当你正在吃饭时,突然来了电话,由于吃饭这个过程比较久,...原创 2019-03-04 14:13:34 · 208 阅读 · 0 评论 -
并发编程学习(2) —— 并发编程Bug源头
前言因为最近在极客时间中学习并发编程,由于内容比较多,涉及范围比较多,因此写下这些文章,一来方便自己日后回顾,同时能够根据自己的理解稳固知识内容,二来能够让更多朋友了解并发的知识,因为我也是刚刚开始接触,可能在某方面会有一些错误的见解,望大家能够提出不同的看法。并发Bug源头在之前文章提过,CPU、内存、I/O读写的速度存在非常大的差距,用通俗的语言说就是CPU一天就能干完的事,内存就要十天...原创 2019-03-05 12:53:41 · 352 阅读 · 0 评论