首先杀掉线程,不能用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 AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet
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线程讲解
电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) 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多线程机制 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多线程写文件:多线程往队列中写入数据
论文参考,JAVAJAVA多线程教学演示系统论文
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
多线程启动.java多线程启动.java多线程启动.java多线程启动.java
用java平台利用java的多线程特点,编写进度条的现实以及当前时间的实时更新。
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...