00:00
各位同学大家好,欢迎继续收看上硅谷GC高并发编程课程。下面呢,咱们就开始啊,详细学习一下我们课程中的具体内容,首先呢,我们先看课程中的第一个内容,关于GC的概述,在GC的概述中呢,咱们主要讲解两个知识点,第一个知识点呢,给大家来说一下什么是GC,然后第二个知识点带着各位同学咱们来回顾一下进程和线程中最基本的概念。首先我们看第一个内容,什么是doc,那我们来看一下,首先看我的课件中,我这里写到。在Java中的线程部分是一个重点,而本篇内容中说的就是guc guc就是呢关于线程的部分,而guc是Java u concurrent,也就是Java并发编程中这些工具包,这是一个处理现成的工具包,JK1.5的时候开始出现这个包,那这个包我们来看一下,首先大家看文档,这个包Java u current。
01:10
然后在包里边呢,有很多的接口,包括很多的类,而这些接口类是在并发编程中很常用的实用的工具类,用这些工具类咱可以很方便的实现多线程的开发,所以咱们要学的就是这个doc,也就是Java u concurrent Java并发编程中包这些使用的工具类。那这是关于什么是doc?这各位给他知道,然后这个学完之后,第二部分呢,但是各位咱们来回顾一下进程和线程中几个最基本的概念,因为这些呢,是我们学习doc这课程中最基本的这个前置知识,那我们来看一下啊,在概念中主要有这么几个概念,首先进程和线程,线程的几个状态包括两个方法,Wait和sleep,以及并发和并行的概念,那我们先看第一个内容,进程和线程。
02:08
那这里边咱们具体看一下,第一个什么是进程。进程呢,各位同学可以理解是计算机的程序关于某数据集合上一次运行活动是系统进行资源分配和调度的基本在源,也就是说呢,咱们在操作中,比如说咱们打开一个软件,那在我电脑中呢,就会实际占用一个空间,那就表示现在就开启了一个进程,然后大家看线程,什么叫线程的?线程是操作系统能够进行运算调度的最小单元,它被包含在你的进程之中,也就是说咱们现在打开一个进程。然后一个进程中会有很多的线程,多线程在一个进程中进行,这就是进程和线程的基本概念。
03:00
然后进程线程的,咱们举个具体例子,比如说举个各位同学都知道例子,大家看这个,这是360安全卫士啊,比如现在啊,我打开360,那我现在是不是打开了一个软件,那现在就在我电脑中占用了这一个进程,360就是一个进程,而在360里边是不是有很多操作呀,比如我现在点击这个叫木马查杀,这个电脑清理,这个叫系统修复,那这些是我360中的具体内容啊,这些是什么?你可以理解为就是里边的多个线程。所以这就是进程和线程中的最基本概念,总结起来就是两句话,咱们来读一遍。首先第一句话。进程指的是在系统中正在运行的一个应用程序,而程序一旦运行就是一个进程。比如说咱们现在打开这个360软件,我这个360的程序运行了,那现在就是一个进程,进程是一个资源分配的最小单元。
04:05
然后第二个叫线程,线程什么意思呢?是系统分配处理器时间资源的基本单元,或者说呢,进程之内独立运行的一个单元,执行流,线程是程序执行的最小单元,就是咱们刚才提到我在360里边呢,可以做很多操作,每每个操作就是它的线程,一个进程中可以有多个线程,所以这是我们说的第一个概念,进程和线程。大家就想一下这个360应该能更好理解。关于晋朝和现丑。所以第一个概念我们做了一个说明,然后这个说完之后咱再说第二个关于线程中几个重要的状态。然后现成的状态呢,咱们可以通过啊,线程里边有一个枚举类,就是slide里边那个叫state,然后大家看这是我写出来这个枚举类,这枚举类中的有关于现象中几个最基本的状态,那状态咱来看一下,首先第一个状态叫new,也就是新建。
05:10
然后第二个状态叫re,叫做准备就绪,比如说你现在可以用我这个线程了,第三个叫什么block的阻塞,就是等待,然后第四个叫waiting。第五个叫kept waiting,还有最后一个叫终结,那这什么意思呢?终结表示结束嘛,咱就看这个waiting和kept waiting,这两个都有等待意思,但是他们的区别是什么呢?咱来解释一下啊,首先waiting什么意思叫做不见不散?什么叫不见不散?比如现在啊,我约个人说在晚上五点我们在小树林见面,那这个时候呢,比如到了五点你还没有来,那我怎么做,是不是继续等你,只要你来之后,那我才做其他事情,这个叫不见不散,你不来我就会一直等你。
06:00
然后还有一个叫time waiting,这叫什么?过时不候,什么叫过时不候?比如现在啊,我开个车来等你,我车里边,比如我约定在晚上五点发车,当现在到了五点时候呢,你还没有来,那我做什么?我是不是直接开车走人了,这叫过时不候,而过了五点你再来,你发现车已经走了,所以这是两个微性的区别,一个叫不见不散,一个叫过时不候,这些就是关于现成的最基本的几个状态,各位大家要记住啊,第一个new新建,第二个叫准备就绪,第三个阻塞,第四个,第五个都是等待,这是一个叫不见不散,一个叫过之不候,还有最后一个叫终结。这是咱们线程进程中的第二个这种概念,然后这个说完之后,咱再看里边的第三个概念,就是两个方法,一个叫wait,一个叫sleep,两个方法呢,都有等待的意思,那我们就说一下这两方法它们的区别是什么?
07:06
那各位同学呢,也可以想一下,因为这属于咱们Java基础中那种,首先咱说这个叫wait方法,这各位应该知道啊,Wait方法什么特点。第一个它是object类中的方法,而sleep是这个threat线程类中的静态方法,就是两个方法所在的类不一样,而wait方法因为是object那种方法,所以任何对象是不是都能调用因为object类所类的物类。然后里边的第二个区域就是死力的方法,当这个方法执行的时候呢,它是不会释放锁的,它也不需要占用锁,这是它的第一个特点,就是说sleep在这里边sleep的时候呢,那别人也得不到我这个锁,因为它不会释放,而wait是什么?它会放索,当你wait的时候呢,别人就能得到对把锁。
08:01
这个叫sleep被说到通俗点,Wait会放开锁去睡觉,Sleep会抓住锁就睡觉,另外就是这两方法呢,都会被这个interrupt方法所中断。而两方法还有一个共同点,就是在哪里睡他们就会在哪里醒,所以这是关于wait和sleep的这么一个基本区别。各位把这个知道。然后这个说完之后呢,在进程和线程中还有另外一个也是一个很重要的概念,一个叫并发,一个叫并行,那这两个概念给各位,也是最终咱们来解释一下,首先各位看一下我的文档中,咱们先说两种模式,一个叫串行模式,一个叫并行模式。什么叫串行模式呢?给大家解释一下啊,比如说我现在啊,要做很多的这个事情。那如果说按照串行模式的话,它就是里边的这么一个场景。
09:04
大家看。你注意看啊,看这张图,或者各位能想到什么。能想什么,是不是类似于咱说那个羊肉串或者糖葫芦,那我现在比如说啊,通知我来了多个任务,那我多个任务就要排队一个一个进行执行,这就叫串行操作,就咱说的第一个叫,就你多个任务需要一个一个进行执行,然后并行,什么意思?就是多个任务要同时执行。这是我们说的两个基本概念,一个叫串行模式,一个叫并行模式,但是并行呢,说的具体点,它跟并发是有一定的区别的,那咱们进来说明。也就是我总结的两句话,咱们先看啊,并发什么意思?就是你同时同一个时刻,多个线程同时去访问一个字源,多个线程对应一个点,比较典型的例子就是这个春运抢票电商秒杀。
10:03
这个例子我觉得各位同学应该都感受过啊,比如咱就说这个电商秒杀,比如现在啊,电商平台中有这么一个规则,说在今天晚上十点,我这部手机可以一元秒杀,那这个时候我限量十部手机,那这个时候很多人在这个十点是不要同时去抢这部手机啊,同时是不是去抢这个资源,所以这个过程就叫做并发,同一时刻多个线程同时去访问某一个资源。然后并行,什么意思各位可以理解啊,多项工作一起执行,最后再进行汇总。那这里边呢,我们也举个例子,这个例子应该是更生活化。我觉得各位同学啊,应该都吃过这个方便面,或者说都泡过方便面,这个过程大家想一下咱是怎么做的。你可以想一下啊,首先咱们泡方便面是不是有热水啊,咱们先用水壶烧水,然后在烧水的时候呢,那咱是不是要打开方便面,然后把那调料撕开,放到方便面上,等水烧开之后把水再倒进来,最终等泡好之后,咱是不是再吃面,这个过程你注意啊,我们是不是做很多事情,又烧水,又撕方便面,又放调料,最终再倒水,这就叫并行。
11:25
多项工作一起执行,最后再汇总。所以这是两个基本概念,我再重复一遍啊。并发指的就是同一时刻多个线程同时去访问某个资源,典型例子就是春运抢票、电商秒杀,并行就是多项工作一起执行,最后再汇总,典型例子就是泡方便面的过程。所以这些呢,就是关于咱们这个guc的概述,大家知道doc是Java并发编程包中一些工具类,用这些工具类可以更方便实现咱们这个并发编程操作。然后关于咱们做并发编程的时候需要有些基础知识,那就是进程和线程中的几个基本概念,刚才给大家都做了一个回顾,所以这是我们课程中的第一个内容,关于GC的概述。
我来说两句