过期的suspend,resume 和stop

2023-12-12 08:48
文章标签 过期 suspend stop resume

本文主要是介绍过期的suspend,resume 和stop,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方法介绍

  1. suspend():暂停任务
  2. resume():恢复任务
  3. stop():停止任务

 

stop()

当调用stop()方法时会发生两件事:

  1. 即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。

  2. 会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。

suspend()和resume()必须要成对出现,否则非常容易发生死锁。

这两个操作就好比播放器的暂停和恢复。

不推荐使用suspend()去挂起线程的原因,是因为suspend()在导致线程暂停的同时,并不会去释放任何锁资源。其他线程都无法访问被它占用的锁。直到对应的线程执行resume()方法后,被挂起的线程才能继续,从而其它被阻塞在这个锁的线程才可以继续执行。

interrupt() 与 cancel()的区别

   两者实际上都是中断线程,但是后者更安全、有条理和高效,其原因跟推荐使用Executor而不直接使用Thread类是一致的。所以结合上面讲到的原则,我们应尽量采用cancel()方法,调用线程管理器ExecutorService接口的submit(Runnable task) 方法会返回一个Future<?>对象,然后调用Future.cancel()的方法来取消任务,并返回一个boolean值。

 

 

不再使用的原因

  • suspend()方法在调用后,线程不会释放已经占有的资源,而是占用着资源进入睡眠状态,这样容易引发死锁问题。
  • stop()方法在终止一个线程时并不会保证线程的资源能够正常释放。通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定的状态下

这篇关于过期的suspend,resume 和stop的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483973

相关文章

Redis进阶 - 朝生暮死之Redis过期策略

概述    Redis 是一种常用的内存数据库,其所有的数据结构都可以设置过期时间,时间一到,就会自动删除。你可以想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就会立即收割。   你还可以进一步站在死神的角度思考,会不会因为同一时间太多的 key 过期,以至于忙不过来。同时因为 Redis 是单线程的,收割的时间也会占用线程的处理时间,如果收割的太过于

java实现线程的三种方式, stop()和suspend()方法为何不推荐使用

文章目录 1 线程的实现1.1 继承Thread类1.2 实现Runnable类1.3 继承和实现区别1.4 线程池写法 2 stop和suspend方法 1 线程的实现 java5以前,有如下两种: 有两种实现方法,分别使用new Thread()和new Thread(runnable)形式,第一种直接调用thread的run方法,所以,我们往往使用Thread子类,即new

Redis设置和更新Key的过期时间

EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。 在 Redis 中,带有生存时间的 key 被称为『易失的』(volatile)。 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写(overwrite),这意味着,如果一个命令只是修改(alter)一个带生存时

使用jedis时设置过期时间的问题

public void saveRedis(String key, String value, Long expireSecond) {boolean keyExist = jedisCluster.exists(key);// NX是不存在时才set, XX是存在时才set, EX是秒,PX是毫秒if (keyExist) {jedisCluster.del(key);}jedisCl

22- Redis 过期删除策略和内存淘汰策略有什么区别?

Redis 的【内存淘汰策略】和【过期删除策略】,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。 1. 过期删除策略 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 1. 1如何设置过期时间? 先说一下对 key 设置过期时间的命令。设置 key 过期时间的命令一共有 4 个: e

转载:如何设置一个严格30分钟过期的Session

好文章自然要转过来哦! 今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察基本功是否扎实, 谁来回答试试? 呵呵 为什么问这个问题呢? 1. 我在Twitter上看到了有人讨论这个问题, 2 想起来我经常问这个问题, 所以~~

RoboDK试用期间提示无效或过期的许可证

问题描述 RoboDK下载下来在试用期间提示如下信息,不知道什么原因 临时解决方法 将C:\Users\${username}\AppData\Roaming\RoboDK该目录下的文件全部删除掉,便可以正常使用RoboDK应用了,但是等软件关闭后还是会出现上面的问题,还需要执行同样的操作。

FileZilla证书过期,导致FileZilla Client联不上,或者老断开的处理

1、先到服务器上去重新生成一下证书,并且覆盖掉老的证书。edit--settings 输入信息,并且确认生成新的证书: 2、Client连接的时候,弹出证书信任,点击确认。 这样第一次连接,然后访问目录全都是好的,然后再次关闭FileZilla Client,然后再次打开连接, 就会出现以下的问题: IP addresses of control and data con

Os bootup and stop working when the / directory is ful

From the Gnome UI, there is no response in the command line. So telnet from other machine, and cleanup and make up some space in / dir, it will work as normal.

协程(coroutine)应用实例:计时器过期事件响应

协程应用实例:计时器过期事件响应 序1. 计时调度中心2.基于协程的事件处理 序   早期我曾把弄过War3 的WE编辑器,算是我编程的启蒙教育了。其事件响应系统在我心中一直印象深刻,特别是每个事件都可以用等待函数延迟执行,昨天我看到了协程,心血来潮便写了个简陋的计时器响应机制。 1. 计时调度中心   计时调度中心采用linux时间轮式设计,网上资源很全面,不做过多叙述。