`
lizhensan
  • 浏览: 369619 次
  • 性别: 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对杀掉线程更加轻量级,仅仅通过一个表示来控制。把控制权尽可能的让程序自身处理,

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

 

 

分享到:
评论

相关推荐

    Java 模拟线程并发

    Java 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发

    Java线程Java线程Java线程Java线程

    Java线程Java线程Java线程Java线程Java线程Java线程

    java多线程编程总结

    Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 ...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    Java多线程编程总结

    Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:...

    java 线程java 线程

    java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程

    Java线程讲解Java线程讲解

    Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 ...

    java多线程笔记

    Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java...

    Java线程详解大全

    Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程

    JAVA单线程多线程

    单线程 单线程 单线程 单线程 单线程 单线程

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    JAVAJAVA多线程教学演示系统论文

    论文参考,JAVAJAVA多线程教学演示系统论文

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    多线程启动.java多线程启动.java多线程启动.java

    多线程启动.java多线程启动.java多线程启动.java多线程启动.java

    java多线程进度条实例

    用java平台利用java的多线程特点,编写进度条的现实以及当前时间的实时更新。

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

Global site tag (gtag.js) - Google Analytics