JAVA-初步认识-第十四章-多线程-停止线程方式-interrupt

一.

结合上一节继续讲述,不要以为设置了标记线程就能停止,依旧有停不下来的情况。

整个函数就是添加了wait()方法,导致try-catch的加入。

DOS结果显示,程序没有停下来,和主线程结束了。其余两个线程都没结束,都处于等待状态。

这两个线程拿到锁进来后,都wait停在这了。

设置标记也没用,因为这两个线程就没读到标记。

有人说采用notify方法,但是notify要在同一个锁中,在这个程序中放不了。

如果程序中不用wait,用sleep呢?而且sleep时间比较长,比如说一个小时,没有一个小时根本醒不了。(这里就是说即使不是wait方法,换成sleep方法,也会出现线程没结束的情况,这样该怎么处理?)

接下来,介绍一种新方式。这种方式原理还是一样的,表现形式不一样。

什么叫中断?正在运行,突然停止了,这就是中断,中断其实就是一种冻结状态。而这个interrupt方法可以将中断状态清除掉。清除就是指它结束中断状态,继续运行。

interrupt是在将线程的冻结状态清除掉,让线程恢复到具备着cpu执行资格的状态。这和之前的notify有什么区别呢?不用notify,都能把线程从wait唤醒回来,不用等你时间到都可以从sleep状态回来。这种做法有点强制性,所以会抛出异常。它在不该醒的时候,你把它弄醒了。

我们将st.setFlag();该为两个线程中断。DOS结果显示如下,

(具体的内容再去看视频)

(但是)

如果你连标记都没读到,我就让你读标记,怎么让它读标记?直接调用interrupt先从状态中拉回来再说。中断异常,冻结状态异常。

当我们有些运行中的线程处在这种状态,但我们程序准备结束的时候,我们有可能强制地将这些线程从冻结状态拉回运行状态,让其结束。大家都知道,我们有三个线程,主线程结束了,它俩没结束,这个程序就结束不了。所以,必须要让所有的线程都结束,这个进程才能结束。不是所有线程都能结束的,系统的就结束不了。

时间: 2024-10-24 07:37:24

JAVA-初步认识-第十四章-多线程-停止线程方式-interrupt的相关文章

JAVA-初步认识-第十四章-多线程-停止线程方式-定义标记

一. 线程既然开启了,运行了,冻结又恢复运行了,那什么时候消亡呢? 怎么来停止线程呢?不能一直在运行. 线程怎么停,线程自己最清楚.在Thread类中,提供了stop方法, 本来线程持有一个锁,只要stop,它就什么都在放,这是强制操作,无论出于什么状态,强制将其搞定.本来wait,这那儿的,stop一下子就没了. stop方法做的不是状态切换了,而是消失. 线程停止,其实只有一种,就是run方法结束. 线程一旦没有自己运行的代码了,任务没有了,线程自动就结束了.可是线程的任务怎么能没有呢? 标

java 面向对象编程--第十四章 多线程编程

1.  多任务处理有两种类型:基于进程和基于线程. 2.  进程是指一种“自包容”的运行程序,由操作系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存. 3.  线程是进程内部单一的顺序控制流.一个进程拥有多个线程.多个线程共享一个进程的内存空间. 4.  基于进程的特点是允许计算机同时运行两个或更多的程序. 5.  基于线程的多任务处理环境中,线程是最小的处理单位. 6.  基于进程所需的开销更少:每个进程都需要操作系统为其分配独立的内存空间:同意进程中的所有线程都在同意内存

No_16_0325 Java基础学习第二十四天—多线程学习总结

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.03.25 lutianfei none 第十章 多线程 多线程概述 什么是进程? 进程:就是正在运行的程序. 进程是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程有什么意义呢? 可以在一个时间段内执行多个任务. 可以提高CPU的使用率. 什么是线程呢? 在同一个进程内又可以执行多个任务,而这每一个任务我就可以看出是一个线程. 线程:是程序的执行单元,执行路径.是程序使用CPU的最

201671010107 2016-2017-2 《Java程序设计》第十四章学习心得

通过这一章的学习,我知道了程序,进程和线程之间的关系,知道了Java实现多线程的两种途径:1.创建Thread类的子类:2.在程序中定义实现Runnable接口的类.线程的中断,线程的六种状态,多线程调度,守护线程,线程的同步等.

JAVA基础之(十四)--“多线程”

菜鸟里写的暂时够用了,菜鸟 不充点: 如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口.这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类[java的api建议] 菜鸟中只有前半部分,线程同步,死锁等需要看书:重在理解概念和应用: 原文地址:https://www.cnblogs.com/silence-fire/p/9756442.html

JAVA-初步认识-第十四章-多线程-wait和sleep的区别

一. wait和sleep的方法有些类似,我们现在要对其进行描述,区分它们. wait方法在object类中,而且有两种形式,分别是wait()和wait(long timeout),我们关注后者. 参数的截图中表明wait方法可以醒. 等待和睡眠的区别,睡眠是可以醒过来的,但是等待有可能是无休止的. 两者一个是object方法,一个是thread方法. sleep能不醒,不需要被人叫.sleep拿着锁,别人进不来. 现在讲述一些有趣的,可能颠覆以往的概念. 这两个是同一个锁,t0,t1,t2三

JAVA-初步认识-第十四章-多线程(守护线setDaemon)

一. 除了interrupt方法,还有其他方法, 我们要介绍线程类中常见的一些方法,比如说setDaemon, 还是结合之前的例子来讲解,t1和t2两个线程,我们中断了一个,另一个没有中断,那么DOS结果就结束不了. 可是如果在开启t2之前,将其设置成守护线程的话,守护听不懂,可以将它认为是后台线程.以前认识的线程都是前台线程, DOS结果显示为结束了. 两者有什么区别呢?后台线程的特点在于,它和前台线程都正常进行开启,就是结束不一样,运行都一样,互相抢夺cpu的执行权,结束的时候,前台线程必须

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

“全栈2019”Java多线程第四十二章:获取线程与读写锁的保持数

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第四十二章:获取线程与读写锁的保持数 下一章 "全栈2019"Java多线程第四十三章:查询是否有线程在等待读写锁 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo