`
lizhensan
  • 浏览: 378700 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 杀掉线程

    博客分类:
  • java
 
阅读更多

首先杀掉线程,不能用stop,信息请看JDK的文档说明。这里简单总结有2点:

1:关闭会导致线程中释放所有锁,这样不能保证其它线程用到的锁对象是完整的或逾期的。

2:stop让处理程序静悄悄的结束,没办法做一些后处理。

官方推荐采用interrupt,同时也带来了问题,在阻塞的情况,不太好处理。

这里先对各种阻塞做下罗列测试。

 

Thread.sleep(1 * 1000); OK  java.lang.InterruptedException

this.wait(); OK  java.lang.InterruptedException

 

 

System.in.read(); 不可以停止,线程还照样存活

 

synchronized 如果代码出现死锁,就是出现对方互相等待,不会停止

 

数据库出现长时间的锁  不会停止

 

java.net.SocketInputStream.socketRead0(Native Method)

java.net.SocketInputStream.read(SocketInputStream.java:129)

oracle.net.ns.Packet.receive(Packet.java:282)

oracle.net.ns.DataPacket.receive(DataPacket.java:103)

oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:230)

oracle.net.ns.NetInputStream.read(NetInputStream.java:175)

oracle.net.ns.NetInputStream.read(NetInputStream.java:100)

oracle.net.ns.NetInputStream.read(NetInputStream.java:85)

oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:122)

oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:78)

oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179)

oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)

oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)

oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)

oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)

oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)

oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)

oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)

oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)

oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530)

   - 已锁定 oracle.jdbc.driver.T4CConnection@289d2e

oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)

thread.ThreadTest$jdbcTest.add(ThreadTest.java:296)

thread.ThreadTest$jdbcTest.tLock(ThreadTest.java:313)

thread.ThreadTest$2.run(ThreadTest.java:59)

 

这里是数据库锁的线程堆栈,也就是如果数据库锁了, interrupt 线程,是没反应的。

这种情况只能通过jdbc超时设置来处理。setQueryTimeout 注意这里秒为单位。

 

代码出现死锁说明是程序的bug,应该调整逻辑来处理。

 

 

总得来说,interrupt对杀掉线程更加轻量级,仅仅通过一个表示来控制。把控制权尽可能的让程序自身处理,

从而保证数据的一致性及线程的安全性。

 

 

分享到:
评论

相关推荐

    不要用强制方法杀掉python线程

     不要试图用强制方法杀掉一个python线程,这从服务设计上就存在不合理性。 多线程本用来任务的协作并发,如果你使用强制手段干掉线程,那么很大几率出现意想不到的bug。 请记住一点,锁资源不会因为线程退出而释放...

    Android 实现彻底退出自己APP 并杀掉所有相关的进程

    "Android 实现彻底退出自己APP 并杀掉所有相关的进程" Android 应用程序退出和杀掉所有相关进程是移动应用开发中一个常见的需求。本文将详细介绍 Android 中实现彻底退出自己APP 并杀掉所有相关进程的方法和注意...

    java动物消除小游戏

    总之,"Java动物消除小游戏"是一个理想的Java编程实践项目,它涵盖了Java图形界面设计、数据结构与算法应用、多线程以及游戏逻辑设计等多个重要知识点。通过这个项目,开发者不仅能提升编程技能,还能体验到游戏开发...

    Android开发--多线程下载加断点续传

    对于每一个线程利用一个DownloadInfo类来保存下载的信息,每次在下载过程中向数据库更新信息(我也有想过只在下载暂停时进行更新,但那样的话我们的进程被杀掉时信息就无法保存下来)。在进行下载之前去访问数据库...

    深入研究java.lang.Process类.doc

    Java.lang.Process 类是 Java 类库中的一个核心部分,它提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。下面将对 Process 类的概述、API 预览、创建 Process ...

    超级马里奥 java.doc

    游戏开始时,马里奥会有 3 条生命,消灭敌人或顶一些物品可以得到分数,每到 500 分会增加一条生命,如果马里奥被敌人杀死或是掉下悬崖,会失去一条生命,并从该版面重新开始游戏,如果马里奥的生命数为 0,则游戏...

    达内 coreJava 习题答案

    import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in...

    weblogic启动失败问题解决

    在我们的解决方案中,我们使用 `ps -ef | grep java` 命令来查找名为 `java` 的进程,并使用 `kill` 命令来杀掉该进程。 总结 WebLogic 启动失败的问题可以通过删除 `.lok` 文件、`.DAT` 文件,并杀掉进程来解决。...

    JAVA进程突然消失问题解决方案

    如果你发现Java进程无故消失,第一步应该检查是否被OOM Killer杀死。这可以通过查看系统日志完成,例如 `/var/log/messages`,并使用命令 `egrep -i 'killed process' /var/log/messages` 来搜索相关错误信息。 ...

    Linux服务器Java进程消失问题解决

    Linux 内核有一个机制叫 OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。因此,你发现 Java 进程突然没了,首先要...

    SpringBoot项目执行脚本 自动拉取最新代码并重启的实例内容

    通过本篇文章,读者将了解到如何使用 Git Pull 来拉取最新代码,使用 Maven 进行打包,杀掉当前项目的进程,复制 JAR 文件,使用 nohup 命令后台启动应用程序,并使用 Java Controller 实现自动重启。

    2021-2022计算机二级等级考试试题及答案No.14445.docx

    以上是对计算机二级考试中涉及的各个知识点的详细解释,包括VFP函数、数据管理、硬盘性能、线程编程、SQL语言、内存管理、Java方法重写、VisualFoxpro6.0的界面、函数调用方式、计算机病毒、死锁、计算机安全和C语言...

    使用jconsole监听远程Tomcat服务的方法

    可以通过kill命令杀掉原有的Tomcat进程,并重新启动服务。服务重启之后,使用netstat命令检查端口号是否已经处于监听状态,确保Tomcat服务正常运行并且JMX端口是开放的。 如果服务器上启用了防火墙,还需要在防火墙...

    美团点评2017秋招笔试真题-后台开发&系统工程师A.docx

    但是说进程比线程更容易杀掉不一定准确。 **正确答案:ACD** #### 六、实模式与保护模式 题目考查实模式与保护模式的概念。 - **实模式**:地址计算公式为段值*16+偏移,访问的地址范围为1MB。如果访问超过1MB的...

    IKrabKiller:在 Ikov 上杀死岩蟹

    Java 提供了丰富的库和框架,使得开发者能够轻松地处理网络通信、多线程和用户界面等复杂功能。 IKrabKiller 的工作原理可能包括以下几个核心组件: 1. **网络通信模块**:这个模块负责与 Ikov 游戏服务器建立连接...

    新版Android开发教程.rar

    己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算软件平台,组建了 google 主导的拥有众多产业界巨头的产业联盟,有利于 高效开发、降低成本。 � 由于是源...

    Android经典面试题大全.pdf

    4. **进程管理**:系统根据资源情况自动管理进程,低内存时会杀掉后台进程。 5. **权限模型**:应用需要声明和获取权限才能访问特定系统资源,如读写联系人、发送短信等。 6. **组件可重用性**:通过四大组件...

    NoMobFarmBukkit:一个简单的 Minecraft 反 MobGrinding 插件

    例如,它可以设置每名玩家在特定时间范围内对同一种怪物的击杀上限,超过这个上限后,怪物将不再掉落物品或者经验。这样,即使玩家尝试利用刷怪策略,也无法获得过多的收益,从而保持了游戏的平衡。 此外,...

    CPU占用高

    有一些工具如Process Explorer(微软出品)或VisualVM(Java应用性能分析工具)能提供更详细的性能分析,帮助定位问题。 8. **资源调度优化**: 对于多核CPU,合理分配任务到不同核心可以有效减少单个核心的负载...

    2021-2022计算机二级等级考试试题及答案No.91490.docx

    在Java中,`synchronized`关键字用于实现线程同步,它可以用来标记一个方法或代码块,确保同一时间只有一个线程可以执行这部分代码,从而实现对象级别的互斥锁。 **正确答案:** B. synchronized ### 8. 设置日期...

Global site tag (gtag.js) - Google Analytics