当前课程知识点:JAVA程序设计进阶 >  第一章 线程(上) >  1.3 线程的休眠 >  Video

返回《JAVA程序设计进阶》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《JAVA程序设计进阶》慕课在线视频列表

Video课程教案、知识点、字幕

这一节我们将介绍线程的休眠

线程在运行过程当中

会调用sleep方法

来让自己休眠一段时间

那它为什么要这么做呢

那我们再把这个程序

做一点小改动

看看会有什么样的效果

我们希望说

延长主线程的执行时间

那怎么延长呢

我们可以在这个新线程的

start语句后面

加上一个让当前线程

指的就是main主线程

休眠一毫秒

我们加上个语句

大家看看这个语句

就是在我们这个程序的

倒数第四行 try

然后Thread.sleep1

那这个1指的是1毫秒

那就让当前这个线程

也就是主线程休眠一毫秒

然后在catch Exception

然后最后打印出来

main thread ends

那我们这个当前线程

自己主动休眠一毫秒

那它的效果会怎么样呢

这时候CPU就会去

提交给我们的新线程

让我们的新线程

得到执行的机会

然后新线程执行完了以后

那我们的主线程

经过休眠一毫秒醒过来以后

那就我们的线程调度去

再继续让我们的主线程去执行

我们可以看看这个执行后的效果

大家看看这个结果第一行

main thread starts

说主线程启动了

紧接着是new thread stared

新的线程也启动了

紧接着它计算出它的结果

然后说new thread ends

新线程结束了

最后是main thread ends

那大家对比一下这个执行结果

和上一次执行的结果

有什么不同呢

不同之处就在于我们的主线程

不是立马一开始就结束

因为上次是在

main thread stared后面

紧跟着就main thread ends

而现在不是

而是由我们新的线程

好像是穿插到我们的主线程当中

主线程启动以后

我们新线程又执行

执行完结束后主线程才执行结束

那这就是我们修改后

大家能看到的这个效果

那也希望大家能够体会到

其实背后我们的线程调度器

是怎么在调度多个线程的执行的

那我们下面再看另外一个例子

我们多创建几个线程

看一看会有什么样的效果

我们下面打算创建3个新线程

每个线程它要随机休眠一段时间

我们取的这一段时间是0到6秒的

然后再运行结束

然后我们看看这个代码

public class

ThreadSleepTester

我们看主方法

主方法里面构造了三个线程

这个线程的类型是TestThread

我们构造了thread1

thread2 thread3

然后通过它的构造方法

分别取了名字

然后紧接着我们打印出来

Starting threads

也就是说我要启动各种线程了

我们看一下怎么启动呢

thread1.start

thread2.start

thread3.start

那调用三个start方法

就启动三个线程

那启动完了以后

我们紧着打印

System.out0println

Threads started main ends

也就是说所有线程都启动了

我们的主线程要结束了

那到底刚才创建的这三个线程

它执行什么功能呢

我们来看一看

class TestThread

extends Thread

继承自Thread这个类

然后里面有个私有的成员变量

sleepTime 也是休眠时间

好 我们再看看

这个类的构造方法

构造方法里面的

第一行是super name

那指的是调用(负)类的构造方法

而此时负类就是我们的Thread类

紧接着生成sleepTime的一个值

大家看这里生成的值

是用了一个(随机速)方法

Math.random

注意 Math.random

它产生的是一个0到1之间的

一个随机速

那我们再乘以6000

那就是相当于0到6000毫秒

也就是0到6秒之间

好 我们再看看我们的

线程的主方法

就是它的run方法

try System out println

打印出什么呢

getName就是我们线程的名字

然后说going to sleep for

这个线程打算休眠多长时间呢

打印出sleepTime

把这个休眠时间给打印出来

然后紧接着马上调用

Thread.sleep

然后括号就是休眠时间

那这个Thread.sleep

实际上指的是

调用我们当前的这个线程

那当前这个线程

那指的就是我们(英文)

这个类的对象

那后面有catch

各种(英文)

然后最后再打印出

getName加finished

指的就是说

我们这个线程执行结束了

那我们看看

其实这个(英文)Thread类

主要构成就是

休眠0到6秒之间

然后这个再打印出来

说我已经运行结束了

我们看一下运行结果

首先是主线程

就是主方法里面

打印出St学arting threads

然后打印完了以后

它紧接着就

Threads started main ends

也就是说主线程有结束了

那其实我们看到

主线程它所起到的作用就是

创建三个线程

然后自己执行就结束了

那这时候我们再看看

这三个线程的执行情况

thread1 going to sleep for3519

它要休眠3000多毫秒

thread2打算休眠1000多毫秒

然后thread3

打算休眠5000多毫秒

大家看到这个打印顺序

基本上就是在

我们的线程调度器调度的时候

是thread1先执行

thread2执行 thread3先执行

那我们看结束

是不是也是按照这个顺序呢

大家看到thread2 finished

第二个线程先结束了 为什么呢

大家看看它只是休眠1000多毫秒

那在这三个线程中

它是休眠时间最短的

所以它休眠结束了以后

它立马这个线程结束

紧接着thread1 finished

第一个线程结束了

因为第一个线程

要休眠的是3000多毫秒

然后再下面thread3结束了

那因为它休眠的时间是最长的

是5000多毫秒

所以它最后结束

所以从这个例子

大家可以看出来

我们线程启动是有顺序

但是最后结束时候的顺序

取决于它休眠的时间有多长

线程休眠的原因

就是要让其它线程

得到执行的机会

这一节的内容就介绍到这里

谢谢大家

JAVA程序设计进阶课程列表:

第一章 线程(上)

-1.0 导学

--Video

-1.1 线程的基本概念

--Video

-1.1 线程的基本概念--作业

-1.2 通过Thread类创建线程

--Video

-1.2 通过Thread类创建线程--作业

-1.3 线程的休眠

--Video

-1.3 线程的休眠--作业

-1.4 Thread类详解

--Video

-1.5 通过Runnable接口创建线程

--Video

-1.5 通过Runnable接口创建线程--作业

-1.6 线程内部的数据共享

--Video

第二章 线程(中)

-2.0 导学

--Video

-2.1 线程同步的思路

--Video

-2.2 线程同步的实现方式—Synchronization

--Video

-2.3 线程的等待与唤醒

--Video

-2.4 后台进程

--Video

-2.5 线程的生命周期与死锁

--Video

-2.6 线程的调度

--Video

第三章 线程(下)

-3.0 导学

--Video

-3.1 线程安全与线程兼容与对立

--Video

-3.2 线程的安全实现-互斥同步

--Video

-3.3 线程的安全实现-非阻塞同步

--Video

-3.4 线程的安全实现-无同步方案

--Video

-3.5 锁优化

--Video

第四章 网络编程(上)

-4.0 导学

--Video

-4.1 URL对象

--Video

-4.2 URLConnection对象

--Video

-4.3 Get请求与Post请求

--Video

-4.4 Socket通信原理

--Video

-4.5 Socket通信实现

--Video

第五章 网络编程(下)

-5.0 导学

--Video

-5.1 Socket 多客户端通信实现

--Video

-5.2 数据报通信

--Video

-5.3 使用数据报进行广播通信

--Video

-5.4 网络聊天程序

--Video

第六章 Java虚拟机

-6.0 导学

--Video

-6.1 Java虚拟机概念

--Video

-6.2 Java虚拟机内存划分

--Video

-6.3 Java虚拟机类加载机制

--Video

-6.4 判断对象是否存活算法及对象引用

--Video

-6.5 分代垃圾回收

--Video

-6.6 典型的垃圾收集算法

--Video

-6.7典型的垃圾收集器

--Video

第七章 深入集合Collection

-7.0 导学

--Video

-7.1 集合框架与ArrayList

--Video

-7.2 LinkedList

--Video

-7.3 HashMap与HashTable

--Video

-7.4 TreeMap与LinkedHashMap

--Video

-7.5 HashSet

--Video

第八章 反射与代理机制

-8.0 导学

--Video

-8.1 Java反射机制

--Video

-8.2 Java静态代理

--Video

-8.3 Java动态代理

--Video

-8.4 Java 反射扩展-jvm加载类原理

--Video

-8.5 Java进阶课程总结

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。