为什么java线程不推荐调用stop,suspend,resume方法

一、stop

stop方法不推荐调用,官方说发是“可能发生不可预测的问题”。其实线程在调用stop方法后,会停止自己。线程停止的时候,会直接停止执行,并释放自己正在使用的锁资源。问题出在这里,如果线程拿到锁,只执行了几步,还剩几步没有执行完,如果此时释放锁,其他线程重新接管,可能导致线程不安全的事情发生。并且这种问题几乎无法Debug。

二、suspend和resume方法

这两个方法必须要成对出现,否则非常容易发生死锁,因为suspend方法并不会释放锁。如果不能保证之后会有人调用resume方法,会导致线程永远挂起。其次,suspend和resume方法通常不一定是一个线程来顺序执行。有可能一个线程来suspend另一个线程来resume,而如果没有处理好线程间的调用顺序,非常可能发生,resume发生在suspend之前,这样又会导致线程suspend之后,永远没有人来resume他,发生“线程冻结”的场景。

时间: 2024-11-05 11:47:57

为什么java线程不推荐调用stop,suspend,resume方法的相关文章

c++与java中子类中调用父类成员的方法

1 java中: 2 import java.util.Scanner; 3 public class ClassTest{ 4 public static void main(String args[]){ 5 child ch=new child(2); 6 parent p=ch; 7 p.print(); 8 //p.print2();//调用错误,父类中没有改成员方法,该方法只属于子类! 9 } 10 } 11 12 class parent{ 13 int xx; 14 parent

Java中使用HttpRequest调用RESTfull的DELETE方法接口提示:How to fix HTTP method DELETE doesn't support output

说明:无论是Spring框架还是Spring Boot的Feign形式的客户端,以下的解决方法都适用. 解决方法:直接升级JDK 1.8,这个问题是1.7的BUG. 参考: https://salesforce.stackexchange.com/questions/34624/http-method-delete-doesnt-support-output https://salesforce.stackexchange.com/questions/66097/how-to-fix-http-

使用Java的反射功能调用类中的方法

最近一直在搞Java的反射,今天使用反射调用方法时出现了很多问题,主要是没有详细参考官方API.所以走了很多弯路. 所以想把这个例子记下来,供自己也供他人学习. package com.mine.practice.reflect; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 使用反射调用类中的方法 * @author 2014-11-5 上午10:51:28

跨线程用invoke调用ui控件方法小结

同步方法,控件.invoke(delegate,参数),前面这个delegate要声明而且要实现,为什么要实现呢?因为控件不知道怎么实现.你得把解决方案通过委托给控件,控件才能照做. 相当于send了一个invoke message给控件, "Hi,A控件,我是其它线程来的,想委托你做点事情,具体怎么做我写在委托的信封里头了", 控件拆开信封,按照信封里头的内容处理. 异步方法,就是BeginInvoke,Endinvoke,更加灵活,可以在控件做完了还能回调一些函数,让调用线程做些通

Java线程经典面试题

53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点. 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并

Java线程面试题 Top 50

原文链接: javarevisited 翻译: ImportNew.com- 李 广译文链接: http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程

【转】Java线程面试题Top50

目录(?)[-] 50道Java线程面试题 1 什么是线程 2 线程和进程有什么区别 3 如何在Java中实现线程 4 用Runnable还是Thread 6 Thread 类中的start 和 run 方法有什么区别 7 Java中Runnable和Callable有什么不同 8 Java中CyclicBarrier 和 CountDownLatch有什么不同 9 Java内存模型是什么 10 Java中的volatile 变量是什么 11 什么是线程安全Vector是一个线程安全类吗 详见这

疯狂Java学习笔记(59)-----------50道Java线程面试题

50道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点.欲了解更多详细信息请点击这里. 2) 线程和进程有什么区别? 线程是进程的子集,一个

Java线程面试题 Top 50(转)

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在J