
我所知道系列:并发编程
文章平均质量分 84
记录并发编程的学习与笔记
余飘飘
讲粤语,讲文明,好好学习,好好生活
展开
-
我所知道并发编程之死锁
前言前篇文章在讲解线程安全的时候,有提到过为了保证每个线程都能正常执行共享资源操作,Java引入了锁机制虽然这样使多线程改善了系统的处理能力,然而也带来了新的问题,其中之一:死锁什么是死锁所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进死锁产生的条件以下将介绍死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁互斥条件进程要求对所分配的资源(如打印机〉进行排他性控制,即在一段时间内某资源仅为一个进程所原创 2021-05-30 15:52:39 · 192 阅读 · 1 评论 -
我所知道并发编程之线程安全问题
前言前几篇文章讲解了线程的生命周期,以及会进入不同的阶段与每个阶段做了什么事情那么接下来我们要介绍的是线程安全问题,那么什么是线程安全问题?什么是线程安全问题我们这里举例的是多个线程同时运行,并同一个实现了Runnable的接口的类程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。反之则是线程不安全的问题演示为了演示线程安全问题,我们采用多线程模拟多个窗口同时售卖影票public class Ticket implements Runnable原创 2021-05-30 11:09:21 · 518 阅读 · 6 评论 -
我所知道并发编程之Lock接口认识与使用
前言关于锁其实是解决线程安全性问题的另外一种方案,目前我们学习到解决方案有几种,分别是synchronizedvolatileAtomic而synchronized是通吃的但它比较笨重其次是比较繁琐,性能上也不好因此才出现volatile和Atomic这两种解决方案那么难道volatile和Atomic这两种就没有局限性了吗?其实是有的比如说volatile修饰了变量之后,那么只能保证这个变量在线...原创 2021-03-02 00:00:00 · 156 阅读 · 0 评论 -
我所知道并发编程之理解死锁与重入锁
前言我们来了解几个锁的概念,就是自旋锁、死锁、重入锁一、重入锁首先来看重入锁,也就是锁重入,什么意思呢?先说非重入锁我们知道当多个线程来访问一个已经加了一个synchronized的方法的时候一个线程拿到我们的锁之后,那么,其他的线程就需要等待当第一个线程执行完毕释放了这个锁之后,那么其他的线程才能够再进来那么这就是说锁是不能够让所有的线程都进来的,只能有一个线程进来,然后其他的线程都在外面等着那...原创 2021-03-01 00:00:00 · 174 阅读 · 0 评论 -
我所知道并发编程之synchronized保证线程安全的原理(理论、JVM)
前言在上一篇文章中我们讲到实现了一个数值序列生成器但是在我们的多线程的环境下,会发现生成的数值序列不是我们所预期的那种递增的序列,而是会出现那种我们所不预期的错误当时的解决方案比较简单,就在那个方法上加了一个synchronized,于是这个问题就解决了,我们并没有去详细的解释为什么在方法上加了一个synchronized就能够解决从本篇文章开始,我们来正式的了解解决线程安全性问题的各种的方案,首...原创 2021-03-01 00:00:00 · 267 阅读 · 0 评论 -
我所知道并发编程之聊聊并发、多线程、多进程、多线程快?、并发四个阶段...
本篇目录你真的了解并发吗?为什么要使用并发?多线程和并发多线程和多进程多线程一定快吗学习并发的四个阶段一、你真的了解并发吗?为什么要使用并发?我们有没有见过并发的场景呢?其实并发是无处不在的,比如,淘宝的双十一就是一个非常高的并发量,就是很多人同时去访问一个网站,而这个网站却能够支撑大量的并发访问,这就是一个并发的场景.细致的说,web容器、数据库服务器,等等各类的服务器软件,都是支持并发的,那么...原创 2021-02-23 00:00:00 · 393 阅读 · 0 评论 -
我所知道并发编程之了解多线程所带来的风险
前言我们之前也提到过线程不光有它的优势,同样的线程也会带来一定的风险一般有以下三点问题:线程安全性问题线程活跃性问题线程性能问题从第一点到第二点线程带来的风险严重性依次降低,第三个其实就是相当于优化。 线程安全性问题是一块大的专题,所以我们在解决线程安全性问题之前,我们先把第二点和第三点这两个问题先解决了。一、线程活跃性问题什么是活跃性问题呢?活跃性问题有多种形式,比如死锁、饥饿、活锁等等就是一种...原创 2021-03-01 00:00:00 · 210 阅读 · 0 评论 -
我所知道并发编程之使用定时器、线程池方式演示多种线程创建(二)
上一篇文章介绍了Runable、匿名类、带返回值的线程创建方式接下来我们这篇要介绍使用定时器、线程池、Lambda表达式等方式来创建一、使用定时器创建线程定时器其实也是相当于开辟一个线程来进行执行定时任务,就是我们所熟悉的Timer类比如说我们想在某一个时间点上执行一件事,比如凌晨要跑数据,或者实现20分钟之后提示我们一些事等等,都可以通过定时器来执行定时器关于定时任务,除了JDK所给我们提供的T...原创 2021-02-25 00:00:00 · 128 阅读 · 0 评论 -
我所知道并发编程之线程的初始化,中断以及其源码讲解
一、了解多线程的创建从这里开始,我们来了解线程的创建,一般有以下多种方式等创建方式继承Thread类实现Runnable接口继承Thread类和实现Runnable接口,这两种方式可以说是中规中矩的,也是我们用的比较多的创建线程的方式。匿名内部类的方式我们也可以使用匿名内部类的方式继承Thread类和实现Runnable接口的完成另外一种方式创建带返回值的线程在run()方法中没有办法去抛出更多的...原创 2021-02-25 00:00:00 · 160 阅读 · 0 评论 -
我所知道并发编程之使用Runnable、匿名内部类、带返回值的方式演示多种线程创建(一)...
上一篇文章有使用到demo代码演示使用继承Thread类的线程创建方式接下来讲一讲实现Runnable接口的方式一、实现Runnable接口的方式我们之前提到创建多线程的方式中,有实现Runnable接口的方式class Demo2 implements Runnable{ @Override public void run() { System.out.pri...原创 2021-02-25 00:00:00 · 440 阅读 · 0 评论 -
我所知道并发编程之线程的状态以及各状态之间的转换详解
一、线程的状态首先我们的线程被创建出来之后,它并不是会立刻执行,而是由多个线程进行抢占CPU资源,那么,哪一个线程抢占到了,那一个线程就来执行。就像之前讲的烤烧饼的例子一样,炉子上面有多个任务在转,转到哪个任务(烧饼),那么那个任务就执行。也就是说,在这个过程中,涉及到线程的生命周期的问题,就是说,从线程的创建到线程的结束的这个过程,它所经历的各个阶段,即线程的状态那么可以说,线程从创建到死亡,可...原创 2021-02-24 00:00:00 · 265 阅读 · 0 评论 -
我所知道并发编程之使用JDK8提供的lambda进行并行计算
本节来了解创建线程的最后一种方式:使用Lambda表达式实现一、使用Lambda表达式Lambda表达式是jdk8中所实现的一个新特性,称之为函数式编程,也是一个非常强大的功能Lambda表达式有非常多的好处也有坏处,我们这里简单提几点它的好处,就是使用Lambda表达式的代码看上去会更加的简洁另外就是实现起来会更加的方便,然后再就是它对并发的支持是非常好的,使用Lambda表达式写出来的代码可能...原创 2021-02-26 00:00:00 · 396 阅读 · 0 评论