多线程
文章平均质量分 57
G_66
这个作者很懒,什么都没留下…
展开
-
03-解析多线程与多进程的联系以及上下文切换所导致资源浪费问题
什么是进程?简单来讲就是运行中的程序,那么,何为运行中的程序呢?我们如何来看看进程呢?操作系统都是多进程的。我们通过任务管理器就可以看到操作系统中当前运行的很多的进程我们写过的任何的一个程序,我们写一个程序,那么,这个程序运行起来,它就称之为进程。进程和线程之间又有什么关系呢?这里简单给大家提几点,进程是资源分配的基本单位。如果大家对进程比较感兴趣的话,你可以去了解一下咱大学中所学的《...原创 2018-12-28 21:41:22 · 1274 阅读 · 0 评论 -
14-synchronized保证线程安全的原理(理论层面)
我们本讲开始来正式解决我们之前所遇到的线程安全性问题,回顾之前的内容,我们实现了一个数值序列生成器,那么,这个数值序列生成器呢,在我们多线程的环境下,会发现,生成的数值序列不是我们所预期的那种递增的序列,而是会出现那种我们所不预期的错误,不符合我们预期的错误,但是,我们当时的解决方案比较简单,就在那个方法上加了一个synchronized,于是,这个问题就解决了,我们并没有去详细的解释为什么在方法...原创 2019-01-03 11:52:59 · 799 阅读 · 0 评论 -
13-从Java字节码的角度看线程安全性问题
本讲就来了解线程安全性问题,线程安全性问题是一个非常复杂,就是说,在没有充足的同步的情况下,多个线程中的操作的执行顺序是不可预测的,那么,可能就会,我们说在单线程中正常执行的问题,那么在多线程中可能就会出现非常奇怪的问题,这就是所谓的线程安全性问题,当然了,对线程安全性问题没有一个统一的结论,各有各的说法,其中有一条就是说,能够符合预期的执行结果,那么这个多线程这个线程就没有安全性问题,不符合预期...原创 2019-01-02 20:03:57 · 776 阅读 · 0 评论 -
18-深入理解volatile原理与使用
我们本节来了解一个新的解决线程安全性问题的一个方案,我们知道,通过synchronized可以完全的来解决线程中所遇到的安全性问题,那么,我们也知道,synchronized属于一个相对来讲比较重量级的锁,虽然在JDK6的时候已经增加了偏向锁以及轻量级锁,但是,在很多情况下,使用它依然会显得比较笨重,那么,我们本节就来了解一个新的解决线程安全性问题的一个方案,叫做volatile关键字,这么说吧,...原创 2019-01-05 22:52:40 · 761 阅读 · 1 评论 -
12-从线程的优先级看饥饿问题
上一讲我们已经了解了线程带来的风险的活跃性问题、性能问题,我们把线程安全性问题在往后延时一节,有同学反映就是说,关于活跃性问题,我们之前已经提到过了就是说,它的形式有三种,死锁、饥饿、活锁。对于饥饿问题,咱大家可能还是了解的不是太清楚,这里在给大家详细的说一下这个问题,这里所谓的饥饿,咱之前也已经说过了,举了一个餐厅里面排队的例子,如果一直打不到饭,那么就饿死了,这个例子也比较符合情景...原创 2019-01-01 17:40:59 · 1692 阅读 · 1 评论 -
20-Lock接口认识与使用
本讲来了解一下关于Lock,Lock顾名思义就是锁,我们之前也已经了解过了关于锁,它其实是解决线程安全性问题的另外一种方案,解决线程安全性问题,我们已经学习了哪些呢?第一个就是synchronized;第二个,我们了解了volatile。这两个可以追溯的历史是比较远的,synchronized在JDK多线程出现的时候,就出现。第三个是 ,JDK5新特性中新加入的goc包中的Atomic,Atomi...原创 2019-01-10 22:53:58 · 337 阅读 · 0 评论 -
17-理解自旋锁,死锁与重入锁
本讲我们来了解我们之前所遇到的几个锁的概念,就是自旋锁、死锁、重入锁。我们首先来看重入锁,也就是锁重入,什么意思呢?我们之前,我们用到的synchronized就是一个重入锁。那么,什么是重入锁呢?先说非重入锁,我们知道,当多个线程来访问一个方法的时候,比如说这个方法上已经加了一个synchronized,多个线程来进行访问的时候,那么,显然,当一个线程拿到我们的锁之后,那么,其他的线...原创 2019-01-05 17:34:31 · 1284 阅读 · 4 评论 -
11-了解多线程所带来的安全风险
本节课来了解一个非常重要的问题,线程安全性问题。在了解线程安全性问题之前,我们先了解一下关于线程所带来的风险这个问题,我们之前也提到过这么一回事,我们说,线程不光有它的优势,同样的,线程也会带来一定的风险,我们当时提到了三点,第一点就是线程安全性问题,第二个是活跃性问题,第三个是性能问题。从第一点到第二点线程带来的风险严重性依次降低,第三个其实就是相当于优化。线程安全性问题是我们往后很...原创 2018-12-31 21:48:07 · 352 阅读 · 0 评论 -
02-理解多线程与并发之间的联系与区别
多线程和并发之间到底有什么关联呢?它们之间又有哪些差异呢?我们本节课就来探讨一下。首先说一下什么是多线程,其实之前已经给大家讲了一个非常简单的例子了假如这是我们的一个应用,假如我们在这里面写代码我们知道,程序是一行一行的往下执行的,在Java虚拟机运行时内存区域中,有一块叫做PC寄存器,类似于代码编辑器中的linenumber,指示的是行号,Java虚拟机就跟着行号一行一行的往...原创 2018-12-25 17:16:16 · 1689 阅读 · 2 评论 -
10-使用jdk8提供的lambda进行并行计算
本节来了解创建线程的最后一种方式:使用Lambda表达式实现。Lambda表达式是jdk8中所实现的一个新特性,称之为函数式编程,也是一个非常强大的功能。Lambda表达式有非常多的好处,当然了,它也有坏处,我们这里简单提几点它的好处,就是,使用Lambda表达式的代码看上去会更加的简洁,另外就是,实现起来会更加的方便,然后,再就是,它对并发的支持是非常好的,使用Lambda表达...原创 2018-12-30 21:25:37 · 1630 阅读 · 0 评论 -
08-多种创建线程的方式案例演示(二)使用线程池
本节讲创建线程的第五种方式:定时器。定时器其实也是相当于开辟一个线程来进行执行定时任务,就是我们所熟悉的Timer类,我们来看一下它的用法,其实定时器还是非常有用的,比如说我们想在某一个时间点上执行一件事,比如说,我们凌晨要跑数据,比如说,我们要实现20分钟之后提示我们一些事等等,都可以通过定时器来执行。定时器,关于定时任务,除了JDK所给我们提供的Timer类这个API以外,还有很多的第三方...原创 2018-12-30 15:45:03 · 450 阅读 · 0 评论 -
07-多种创建线程的方式案例演示(一)带返回值的方式
Demo2仅仅是实现了Runnable接口,Demo2就是一个普通类而已,那么,如何来启动这个线程呢?其实,Demo2并不是线程类,而是作为一个线程任务存在,线程任务就是线程所要执行的功能。Thread类中有一个构造方法这个构造方法恰好能够接收一个Runnable接口我们把new Demo2传进去就可以了,这样就传进去了一个线程任务。这个Demo2就是R...原创 2018-12-30 15:22:33 · 463 阅读 · 0 评论 -
06-线程的初始化,中断以及其源码讲解
从这里开始,我们来了解线程的创建,继承Thread类和实现Runnable接口,这两种方式可以说是中规中矩的,也是我们用的比较多的创建线程的方式,后面也是基于继承Thread类和实现Runnable接口的另外一种,也就是,使用匿名内部类的方式。然后我们会发现无论是使用继承Thread类还是使用实现Runnable接口的方式还是使用匿名内部类的方式,这三种方式在run()方法中都没有办法去抛...原创 2018-12-30 15:09:56 · 487 阅读 · 0 评论 -
05-线程的状态以及各状态之间的转换详解
线程被创建出来之后,它并不是会立刻执行,而是由多个线程进行抢占CPU资源,那么,哪一个线程抢占到了,那一个线程就来执行。就像之前讲的烤烧饼的例子一样,炉子上面有多个任务在转,转到哪个任务(烧饼),那么,那个任务就执行,也就是说,在这个过程中,涉及到线程的生命周期的问题,就是说,从线程的创建到线程的结束的这个过程,它所经历的各个阶段,即线程的状态那么,可以说,线程从创建到死亡,可以说有七个状...原创 2018-12-29 21:25:48 · 744 阅读 · 0 评论 -
16-单例问题与线程安全性深入解析
本讲我们来了解一下单例设计模式与线程安全性问题,当然了,我们是以线程安全性问题为主,而引出来单例设计模式,对于单例模式大家可能都不陌生,我们在项目中可以说是到处都会见到单例模式的身影,举个最简单的例子,我们的任何一个应用一般都会有配置文件,当然了,如果我们使用Spring的话,可能都交给Spirng来给我们管理了,比如说我们读取一些简单的比如说proprietary这样的配置文件,那么,我们在用的...原创 2019-01-04 11:47:41 · 328 阅读 · 0 评论 -
04-学习并发的四个阶段并推荐学习并发的资料
并发的学习目标,其实目标是非常明确的,并发为什么会遇到这么多挑战呢?无非就是它有这么多的缺点我们无非就是克服这些缺点之后,写出能支撑大并发的应用就可以了。这就是我们的学习目标,当然了,对于问题的解决,需要有一定的解决问题的能力。 推荐的学习资料:并发编程网:http://ifeve.com/ ...原创 2018-12-29 17:22:18 · 349 阅读 · 0 评论 -
15-synchronized保证线程安全的原理(jvm层面)
本讲我们继续来了解synchronized的原理,上节我们已经从synchronized所实现的同步的外面来了解了synchronized的原理,那么,本讲就来从深层次的层面来看一下synchronized的原理,也就是synchronized底层的实现,当然了也不是非常的偏向底层,更底层的可能就是关于Java虚拟机的实现以及它所调用操作系统的资源,那么,我们不去研究那么深,我们主要是来看一下...原创 2019-01-03 17:23:08 · 1959 阅读 · 0 评论 -
01-你真的了解并发吗
01-你真的了解并发吗我把并发分为四个阶段:第一个阶段是,熟练掌握并发相关的API,能够完成基本的并发编程;也就是我们所熟悉的继承Thread也好,实现Rannable接口也好,使用各种的锁,根号中期,注册队列,等等,你要熟练掌握这些和并发相关的API,这是第一个阶段。我们会用这些API还不行,我们要掌握这些API实现的原理,所以,第二个阶段是,熟读API源码,掌握其原理;了解了这些原...原创 2018-12-18 20:43:47 · 728 阅读 · 0 评论 -
19-JDK5提供的原子类的操作以及实现原理
本节继续了解关于线程安全性问题的一个解决方案,我们之前对于之前所出现的线程安全性问题已经了解了两个解决方案,第一个是synchronized,第二个是volatile。但是对于我们之前的数值序列生成器来讲,使用volatile并不是一个合理的解决方案,因为volatile只能够保证读和写的多个线程之间的可见性,但是,并不能够保证原子性,那么,++(自增)并不是一个原子性操作,因此,volatile...原创 2019-01-10 11:28:33 · 431 阅读 · 0 评论