官方解释如下:
http://download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html
Why are Thread.suspend and Thread.resume deprecated?
Thread.suspend is inherently deadlock-prone. If the target thread holds a lock on the monitor protecting a critical system resource when it is suspended, no thread can access this resource until the target thread is resumed. If the thread that would resume the target thread attempts to lock this monitor prior to calling resume, deadlock results. Such deadlocks typically manifest themselves as "frozen" processes.
Thread.suspend方法是天生易发生死锁的。
如果要suspend的目标线程对一个重要的系统资源持有锁,那么没任何线程可以使用这个资源直到要suspend的目标线程被resumed。
如果一条线程将去resume目标线程之前尝试持有这个重要的系统资源再去resume目标线程,这两条线程就相互死锁了。
分享到:
相关推荐
自.NET 2.0以来,Thread.Suspend()与Thread.Resume()方法已过时,VS提示可以使用如Monitor等技术,但是对于刚接触同步控制的人来说理解起来太复杂。本人利用Thread.Abort()与Thread.Interrupt()可以引起目标线程异常...
在设备初始化时,例如`mxc_board_init`,会将设备注册到电源管理列表`dpm_list`,在后续的`dpm_suspend`和`dpm_resume`过程中,系统会遍历此列表执行相应的操作。 此外,Android内核提供了接口函数,如`wake_lock_...
当设备进入 Suspend 状态时,它会暂时停止所有非必要的功能以节省电力,而在 Resume 状态下,设备恢复所有被暂停的功能。这种机制对于延长电池寿命至关重要。 #### Suspend (挂起) - **定义**:当系统进入低功耗...
2. suspend() 和 resume() 方法:suspend() 和 resume() 方法可以使得线程进入阻塞状态,并且可以恢复线程的执行。 3. yield() 方法:yield() 方法可以使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞。 总结 ...
理解并熟练掌握Thread类的构造器和方法,以及线程优先级的概念,对于编写高效、稳定的多线程程序至关重要。在实际开发中,应避免使用已过时的方法,合理利用线程调度机制,确保线程安全,提高程序性能。同时,对守护...
hal库 FreeRTOS-Task-suspend&resume
`Thread`类提供了一系列用于线程控制的方法,包括`suspend()`和`resume()`,尽管这些方法已被标记为已废弃,并不推荐在现代Java程序中使用。 ### `suspend()`与`resume()`方法 `suspend()`方法用于暂时停止一个...
不能调用Suspend/TerminateThread的原因 在多线程编程中,SuspendThread和TerminateThread函数看似非常有用,可以控制线程的执行和终止。但是,实际上,这两个函数的使用是非常危险的,容易导致程序的死锁和崩溃。 ...
线程的暂停通常使用suspend()和resume(),但这些方法存在死锁风险,因此现在多使用Thread类的interrupt()方法配合isInterrupted()或InterruptedException来实现线程的暂停和恢复。 线程同步是解决多线程间数据安全...
- 不推荐使用Thread.stop()、Thread.suspend()和Thread.resume(),因为它们可能导致不可预测的行为。 8. **线程池**: - **ExecutorService**:Java提供的线程池服务,可以管理线程的生命周期,提高系统效率。 -...
stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果...
值得注意的是,suspend()和resume()组合使用可能导致死锁,因此现代Java编程更倾向于使用interrupt()和isInterrupted()方法来中断线程。 总的来说,Java中的线程机制提供了丰富的功能,用于实现高效的并发编程。...
suspend和resume方法用于暂停和恢复线程的执行,但这两个方法已被废弃,因为它们可能导致死锁。yield方法是一个静态方法,当线程调用yield时,它暗示当前线程愿意让出CPU给同优先级的其他线程执行。 Thread类还提供...
不推荐使用stop()和suspend()方法是因为它们会导致死锁、资源不释放等问题。 47. sleep()和wait()有什么区别? sleep是Thread类的方法,wait是Object类的方法。sleep在指定的时间内让线程进入阻塞状态不释放锁,而...
这些知识点包括:`Thread`类与`Runnable`接口的区别、`synchronized`关键字的作用、`stop()`与`suspend()`方法为何不推荐使用、`sleep()`与`wait()`的区别、同步锁与非同步锁的不同、线程的状态及其转换等。...
`String`类被声明为`final`,意味着它不能被继承。 #### 33\. Strings=newString("xyz");创建了几个StringObject?二者之间有什么区别? - `Strings = new String("xyz");`:创建了一个新的`String`对象。 - `...
2. **线程的暂停、恢复与终止**:通过`stop()`(已废弃)、`suspend()`(已废弃)、`resume()`(已废弃)、`interrupt()`、`join()`和`yield()`等方法对线程进行控制。 3. **线程优先级**:`setPriority()`方法可以...
Java中的多线程是程序设计中的重要概念,尤其在现代计算环境中,多任务并行处理已经成为常态。在Java中,多线程允许程序中有多个执行流同时进行...理解并熟练运用这些概念和方法对于任何Java程序员来说都是至关重要的。
同步使用synchronized关键字修饰同步方法,而stop()和suspend()方法由于可能导致线程安全问题,因此不推荐使用。 47. sleep()和wait()的区别? sleep()是Thread类的方法,调用后线程暂时让出CPU执行权,但不会释放...