第十七章 多线程基础

在这里插入图片描述
在这里插入图片描述

1.线程介绍

1.程序进程线程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.并发并行

在这里插入图片描述
下面写一个代码查看当前电脑有多少CPU
在这里插入图片描述
在这里插入图片描述

2.线程使用

1.继承Thread创建线程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一秒 = 1000毫秒
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.多线程机制

在这里插入图片描述

下面是子线程
在这里插入图片描述
在这里插入图片描述
下面是主线程
在这里插入图片描述

主线程和子线程交替执行
在这里插入图片描述
下面使用JConsole监控线程执行情况
程序在执行时,点击Terminal
在这里插入图片描述
执行jconsole
在这里插入图片描述
连接Thread01这个程序
在这里插入图片描述
在这里插入图片描述
连接上之后切换到线程
其中可以观察线程运行情况
在这里插入图片描述
主线程可以开启多个子线程,子线程中也可以再开子线程
在这里插入图片描述

3.为什么是start

在这里插入图片描述
cat.run()会先将run方法执行完,才去执行下面的代码,是属与串行化执行,并不是真正的多线程
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.Runnable创建线程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是这里用不了start方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.多个子线程案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

交替进行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.多线程售票问题

在这里插入图片描述

Thread实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现问题,票数为0后,还在继续卖票
在这里插入图片描述
原因是三个线程同时瞬间执行代码
在这里插入图片描述

Runnable实现

这里就不用静态属性了,因为这里我们只用new一次SellTicket02属性就行了,其他代码不变
在这里插入图片描述
在这里插入图片描述

这里是将同一个对象,放到其中,故肯定是三个线程
在这里插入图片描述
但这种方法会出现同样的超买问题,原因与上面一样
在这里插入图片描述

7.通知线程退出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10秒后程序退出
在这里插入图片描述

3.线程方法

1.线程中断

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果想要提前终止它的休眠
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本身上面应该休眠20秒但是提前被终止了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.线程插队

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
目前没有加任何额外的操作,主线程和子线程来回交替运行
在这里插入图片描述
下面我们加入join操作,使主线程在运行5次后,让子线程先执行完
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是yield的情况
在这里插入图片描述
这里没有让成功
在这里插入图片描述

3.线程插队练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.守护线程

在这里插入图片描述
下面举一个案例
比如我们的m是一个主线程,而t1是一个无限循环的子线程
当主线程m结束时,我们的子线程t1还是在不断执行的
现在我们将t1做成一共守护线程,即在主线程退出时,我们的t1也退出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面将子线程设为守护线程
在这里插入图片描述
在这里插入图片描述

5.线程7大状态

在这里插入图片描述

官方(上图)是有六种状态
但有地方将Runnable细分为Ready和Running两种
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.Synchronized

[ˈsɪŋkrənaɪzd]

1.线程同步机制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们使用上面的售票问题来举例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里因为有三个线程,所以输出了三次售票结束
在这里插入图片描述
在这里插入图片描述

5.互斥锁

锁是存在于对象中的
在这里插入图片描述
在这里插入图片描述
下面是代码块的形式加锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6
在这里插入图片描述
在这里插入图片描述
如果在静态方法中写入同步代码块,如果要在本类中加锁,不能写this(静态/类方法不能使用this),这里直接写出本类名即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多个线程的锁的对象必须是同一个
比如下面如果new了两个SellTicket01对象,再分别去调用m1,就错了,锁不住
因为其中的this代表了两个不同的SellTicket01对象(不懂重新看视频)
在这里插入图片描述
这里如果想要锁住就得加个static
在这里插入图片描述

6.线程死锁

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序就会卡在这边动不了,陷入死锁(注意:这里的o1,o2是静态的,所有A和B用的是同一个)

7.死锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
线程被挂起后仍然处于Runnable状态

8.线程家庭作业1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.线程家庭作业2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里出现了问题,出现多个线程同时操作代码的问题,加一个Synchronized即可
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《多线程编程实战第二版》是一本经典的多线程编程书籍,全书共分为14章,内容详实,完整涵盖了多线程编程的各个方面。 本书第一章介绍了多线程编程的背景和概念,并讨论了多线程编程的优势和缺点。第二章介绍了多线程编程中最重要的概念——线程。通过对线程的创建、启动、挂起和停止等操作的详细介绍,为后续开发做好了铺垫。 第三章和第四章分别介绍了线程的同步和互斥技术。这两章内容非常重要,因为多线程编程中,线程之间的合作和竞争是非常常见的情况。掌握了同步和互斥技术,才能编写出高质量的多线程程序。 第五章至第七章介绍了线程池的原理和实现。线程池是一种重要的线程管理技术,可以提高多线程程序的可维护性和可靠性。 第八章至第十二章介绍了多线程编程中的高级技术,例如线程调度、异常处理、锁协议和信号量等技术。这些技术对于编写高质量的多线程程序非常有帮助。 第十三章介绍了多线程编程中的常见问题和错误,并提供了解决方法。这些问题和错误非常实用,可以帮助程序员避免一些常见的多线程编程错误。 最后,第十四章提供了编写高质量多线程程序的一些最佳实践和指导。这些实践和指导非常有价值,可以提高程序员的编程水平。 总而言之,《多线程编程实战第二版》是一本非常优秀的多线程编程书籍,适合所有对多线程编程感兴趣的程序员学习。 ### 回答2: 《多线程编程实战第二版》是一本关于Java多线程编程的经典书籍,该书全面深入地介绍了Java多线程编程的各个方面。读者可以通过阅读本书学习到多线程编程的基本概念、多线程的并发性和同步性、线程池、线程协作等内容。 本书的重点是实战。作者通过丰富的代码示例和实际案例来展示Java多线程编程在实际项目中的应用。例如,作者为读者介绍了如何使用线程池来提高程序的性能和效率,如何通过线程协作来避免线程之间的竞争和冲突。 此外,该书还深入介绍了Java 5引入的Lock和Condition机制,以及Java 8中引入的CompletableFuture和Stream API。这些新特性为多线程编程带来了新的思路和新的解决方案。读者可以通过本书的学习深入理解并掌握这些新特性的使用方式。 总之,《多线程编程实战第二版》是一本Java多线程编程的必备参考书籍。它不仅介绍了多线程编程的基础知识和经典案例,还提供了实战经验和高级技巧。无论你是初学者还是有经验的开发者,都可以从中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值