Why is Thread.stop deprecated?
因为它本身就是不安全的。停止一个线程引起它释放了它所有的锁的监控。 (死亡线程的被锁的监控上的异常在堆栈传播)。如有任何以前被这些所锁保护的对象将处于不一致的状态,其他线程现在可以看到不一致的状态。这类对象可以认定是被破坏的。当线程操作被破坏的对象时,可能引发任何结果。此现象可能是微妙和难以察觉,也可以显着。不同于其他为检查的例外, ThreadDeath悄悄地杀死线程,因此,用户没有收到任何警告,他的程序可能会损坏。问题可以出现在任何时间后,实际损害发生,甚至在数小时或数天的以后。
/**
* Thread.stop引起同步异常问题的代码样例。<br>
* 所以过期且不推荐使用。他会造成数据的不一致问题,引起垃圾数据。
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
public class ThreadStopTest {
private static Object lock = new Object();
private static int number = 0;
private static String name = "Name0";
public static void main(String[] args) {
ThreadStop t = new ThreadStop();
t.start();
ThreadRun t2 = new ThreadRun();
t2.start();
// 输出为
// number=1
// name=Name0,
// 如果去掉stop,则输出正常为
// nunber=1
// name=Name11
t.stop();
}
static class ThreadRun extends Thread {
public void run() {
synchronized (lock) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("number=" + number);
System.out.println("name=" + name);
}
}
}
static class ThreadStop extends Thread {
public void run() {
synchronized (lock) {
number++;
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
name = "Name" + number;
}
}
}
}
分享到:
相关推荐
标题 "为什么不鼓励使用 Thread.stop" 涉及到的是Java多线程编程中的一个重要话题,主要探讨了为何在实际开发中不建议直接使用 `Thread.stop` 方法来终止一个线程的执行。 在Java中,`Thread.stop` 被设计为停止一...
在提供的代码样例"qtThread_1"中,我们可以期待看到如何设置和管理这些线程,包括如何传递参数、如何同步线程以及如何处理可能的错误和异常。此外,可能还会涉及到线程池的概念,通过QThreadPool来管理和复用线程,...
### Java线程及同步(synchronized)样例代码解析 #### 一、概述 本篇文章主要分析一个关于Java线程及其同步机制(synchronized)的示例代码。该示例展示了如何在多线程环境中使用`synchronized`关键字来实现线程...
"qtThread-2.rar" 提供的是一个Qt线程练习的样例代码,主要展示了如何通过继承`QObject`来实现线程操作。 在Qt中,有两种常见的线程使用方式:一是直接使用`QThread`类,二是继承`QObject`并重载`run()`方法。本...
Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...
使用`Thread.IsAlive`属性时,应当注意线程同步和竞态条件问题,尤其是在多线程环境下。线程状态的检查和修改应配合其他同步机制,如`Mutex`, `Semaphore`, `Monitor`或`lock`关键字,以防止数据竞争和死锁的发生。...
大数据基础介绍(语音)
以下是一个简单的服务端代码样例(Servers.java): ```java import javax.net.ssl.*; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class Servers { public static void ...
C标准库源代码,能提高对C的理解,不错的哦 下载文件列表 Pack : clibsource.rar C 标准库源代码\ABORT.C C标准库源代码\ABS.C C标准库源代码\ACCESS.C C标准库源代码\ADJUSTFD.C C标准库源代码\ALGRITHM C标准库源...
下面将详细讲解这个“Android应用源码之拍照上传代码样例”所涵盖的关键知识点。 1. **Android权限管理**: 在Android中,访问相机和存储空间都需要申请相应的权限。在Android 6.0(API级别23)及更高版本,需要在...
Concurrent.Thread.js 一个用来让javascript也进行多线程开发的包,感兴趣的快来下吧。
本人利用Thread.Abort()与Thread.Interrupt()可以引起目标线程异常的特点,开发了一种不使用已过时的方法来变相从外部控制线程的挂起与恢复的技术,原理简单,方便理解。 相关技术参考:...
【安卓样例程序】是专为安卓初学者设计的一系列示例代码,旨在帮助开发者入门安卓应用开发。这些示例程序通常涵盖了安卓平台的各种基本功能和常见操作,为学习者提供了一个直观、实践性强的学习环境。 在安卓应用...
messageThread.start(); return START_STICKY; } } ``` 在`MessageThread`中,你需要实现网络请求逻辑,从服务器获取数据,然后使用`messageNotificationManager.notify(messageNotificationId, ...
- 当线程中抛出未捕获的异常时,可以设置一个自定义的Thread.UncaughtExceptionHandler来处理。 - 通过设置线程的setUncaughtExceptionHandler方法来指定异常处理器。 3. **线程组ThreadGroup** - Java允许将...
总之,"高性能计算cuda样例代码及库文件.7z"是学习CUDA编程的宝贵资源,不仅包含了丰富的实践案例,还有预编译的库文件,有助于我们快速入门并精通CUDA编程,从而利用GPU的强大计算能力解决复杂计算问题。...
- **安全性问题**:`Thread.stop()`会立即中断线程,可能会导致线程在不安全的状态下被终止,例如在临界区内部,从而破坏数据一致性。 - **异常处理**:由于线程突然被停止,可能无法优雅地处理资源的释放,如关闭...
另外,`Thread.sleep()`和`synchronized`块等同步操作也可能抛出异常,如`InterruptedException`。在编写多线程代码时,需要注意这些潜在的异常源,并适当处理。 总结来说,"Thread捕捉异常示例"主要涉及了在Java多...
`Thread.ThreadState`属性可以获取线程当前的状态,而`Thread.Suspend`和`Thread.Resume`分别用于挂起和恢复线程,但这些方法在某些情况下可能导致死锁,应谨慎使用。 七、线程优先级 每个线程都有一个优先级,`...