Java安全停止线程方法】的更多相关文章

转: http://blog.csdn.net/flyingpig4/article/details/7675557 1.早期Java提供java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume().,Sun公司的一篇文章<Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? > 2.…
1. 早期Java提供java.lang.Thread类型包含了一些列的方法 start(), stop(), stop(Throwable) and suspend(), destroy() and resume().,Sun 公司的一篇文章 <Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? > 2.使用volatile变量来设置Thread的run的循环条件,保证变量同步性 public class Jav…
在上篇文章<多线程的使用——Thread类和Runnable接口>中提到中断线程的问题.在JAVA中,曾经使用stop方法来停止线程,然而,该方法具有固有的不安全性,因而已经被抛弃(Deprecated).那么应该怎么结束一个进程呢?官方文档中对此有详细说明:<为何不赞成使用 Thread.stop.Thread.suspend 和 Thread.resume?>.在此引用stop方法的说明: 1. Why is Thread.stop deprecated? Because it…
在Java编程中,如何停止线程? 以下示例演示了如何通过创建一个用户定义的方法run()方法和Timer类来停止线程. package com.yiibai; import java.util.Timer; import java.util.TimerTask; class CanStop extends Thread { private volatile boolean stop = false; private int counter = 0; public void run() { whi…
一.停止线程会带来什么? 对于单线程中,停止单线程就是直接使用关键字return或者break,但是在停止多线程时是让线程在完成任务前去开启另外一条线程,必须放弃当前任务,而这个过程是不可预测,所以必须去做好防备. 二.认识停止线程的几个方法  2.1三个被弃用的方法 stop().suspend().resume(). stop()方法被弃用的原因:无论线程执行到了什么位置,一旦被stop就会被马上强制中断,并且释放线程所有持有锁对象,根本就没有安全性. suspend()和resume()这…
错误用例 下面用例中,一个正在sleep的线程,在调用interrupt后,wait方法检查到isInterrupted()为true,抛出异常, 而catch到异常后没有处理.一个抛出了InterruptedException的线程的在调用interrupt后状态马上就会被置为非中断状态.如果catch语句没有处理异常,则下一 次循环中isInterrupted()为false,线程会继续执行,程序无法正常退出. import lombok.extern.slf4j.Slf4j; @Slf4j…
Thread.stop()是一个被废弃的方法,不被推荐使用的原因是stop方法太过于暴力,强行把执行到一半的线程终止,并且会立即释放这个线程所有的锁.会破坏了线程中引用对象的一致性. 使用判断标志位的方法中断线程 interrupt() //线程中断  (标志位设置为true)isInterrupted() //判断是否被中断interrupted() //判断是否中断,并清除当前中断状态(标志位改为false) public static class TestThread extends Th…
     在Java中有以下3种方法可以终止一个正在运行的线程:      1.使用退出标志,是线程正常退出,也就是run方法完成后线程终止.      2.使用stop方法强制终止线程,但不推荐使用这个方法,因为stop.suspend和resume一样,都是作废过期的方法.      3.使用interrupt方法中断线程,大多数停止一个线程使用Thread.interrupt()方法,但是这个方法不会终止一个正在运行的线程,还需要加入一些判断才可以完成线程的停止. 下面我就用几个例子来介绍…
Java 常见的线程方法 示例 1 : 当前线程暂停 Thread.sleep(1000); 表示当前线程暂停1000毫秒 ,其他线程不受影响 Thread.sleep(1000); 会抛出InterruptedException 中断异常,因为当前线程sleep的时候,有可能被停止,这时就会抛出 InterruptedException package multiplethread; public class TestThread { public static void main(Strin…
stop()方法不是一个正确的停止线程方法. 正确的停止方法:设置退出旗标…
一.sleep()方法:在同步中,释放CPU执行权,不释放同步锁,意味着程序停止 二.停止线程方法:原理:run执行完成 1.设置标记 class StopThread implements Runnable { private boolean flag=true; public void run() { while(flag) { System.out.println(Thread.currentThread().getName()); } } public void setFlag() {…
线程启动完毕后,在运行可能需要终止,Java提供的终止方法只有一个stop,但是不建议使用此方法,因为它有以下三个问题: (1)stop方法是过时的 从Java编码规则来说,已经过时的方式不建议采用. (2)stop方法会导致代码逻辑不完整 stop方法是一种"恶意" 的中断,一旦执行stop方法,即终止当前正在运行的线程,不管线程逻辑是否完整,这是非常危险的. 看如下代码: public class Client { public static void main(String[]…
1.线程的状态图 需要注意的是:线程调用start方法是使得线程到达就绪状态而不是运行状态 2.停止线程的两种方法 1)自然停止:线程体自然执行完毕 2)外部干涉:通过线程体标识 1.线程类中定义线程体能够使用的标识 2.线程体使用该标识 3.提供对外的方法改变该标识 4.外部根据条件调用该方法即可 ThreadStop.java: package 多线程; public class ThreadStop { public static void main(String[] args) { //…
程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作.线程是死亡.还是等待新的任务或是继续运行至下一步,取决于这个程序.虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果.你最好还是牢记以下的几点告诫. 首先,忘掉Thread.st…
//军队线程 //模拟作战双方的行为 public class ArmyRunnable implements Runnable { //volatile保证了线程可以正确的读取其他线程写入的值 //可见性 ref JMM, happens-before原则 volatile boolean keepRunning = true; @Override public void run() { while(keepRunning){ //发动5连击 for(int i=0;i<5;i++){ Sys…
什么是线程 线程是操作系统调度的最小单位,一个进程中可以有多个线程,这些线程可以各自的计数器,栈,局部变量,并且能够访问共享的内存变量.多线程的优势是可以提高响应时间和吞吐量. 使用多线程 一个进程正在运行的时候,至少会有一个线程运行. public class Test { public static void main(String[] args) { System.out.println(Thread.CurrentThread().getName()); // 输出main } } 上面…
JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们解释过来应该是生产一个,消费一个,的意思,具体我们通过例子来说 package com.lgl.hellojava; //公共的 类 类名 public class HelloJJAVA { public static void main(String[] args) { /** * 生产者和消费者…
终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法.即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行.比如设置一个标志来控制循环是否执行,通过这种方式让线程离开run()方法. 第一种 使用Thread类提供的stop()方法或suspend()方法强制终止线程(不安全,不要用) 第二种 使用volatile标记位退出线程 第三种 使用 interrupt()方法终止线程 由于其他原因导致线程停滞(如 I/O),进入…
这一章节我们来讨论一下还有一种停止线程的方法-return 1.在主线程上面return,是把全部在执行的线程都停掉 package com.ray.deepintothread.ch01.topic_9; public class StopByReturn { public static void main(String[] args) throws InterruptedException { ThreadFive threadFive = new ThreadFive(); Thread…
java线程停止可以说是非常有讲究的,看起来非常简单,但是也要做好一些防范措施,一般停止一个线程可以使用Thread.stop();来实现,但是最好不要用,因为他是不安全的. 大多数停止线程使用Thread.interrupt()方法,但是这个方法不会终止一个线程,还需要加入一个判断才可以完成线程的停止. 下面介绍一下常用停止线程应该使用的方法: 1.interrupt() Thread.interrupt()方法仅仅设置线程的状态位为中断线程,并不是让线程马上停止,中断线程之后会抛出inter…
本文将介绍jdk提供的api中停止线程的用法. 停止一个线程意味着在一个线程执行完任务之前放弃当前的操作,停止一个线程可以使用Thread.stop()方法,但是做好不要使用它,它是后继jdk版本中废弃的或者将不能使用的方法,大多数停止一个线程的操作使用Thread.interrupt()方法. 1.本实例将调用interrupt()方法来停止线程,创建MyThread.java,代码如下: package com.lit.thread006; public class MyThread ext…
停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作.停止一个线程可以用Thread.stop()方法,但最好不要用它.虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法.在java中有以下3种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止.(我们什么也不做) 使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法.(调用stop) 使用i…
Stop停止线程: 使用stop()方法停止线程是非常暴力的,会抛出java.lang.ThreadDeath Error,但是我们无需显示捕捉, 以下捕捉只是为了看得更清晰. public class StopThread extends Thread{ private int i = 0; @Override public void run() { try { while(true) { i++; System.out.println("i= " + i); Thread.slee…
线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 进程与线程的一个简单解释(阮一峰) 传送门 Java中创建一个线程,方法一:继承Thread类 继承Thread 重写run方法 创建对象,并调用start方法运行 (如果直接调用run方法…
搞过Java线程的人都知道,stop这个方法是臭名昭著了,早就被弃用了,但是现在任然有很多钟情与他的人,永远都放不下他,因为从他的字面意思上我们可以知道他貌似可以停止一个线程,这个需求是每个搞线程开发的人都想要的操作,但是他并非是真正意义上的停止线程,而且停止线程还会引来一些其他的麻烦事,下面就来详细的介绍一下这个方法的历史: 从SUN的官方文档可以得知,调用Thread.stop()方法是不安全的,这是因为当调用Thread.stop()方法时,会发生下面两件事: 1. 即刻抛出ThreadD…
什么是中断 Java的一种机制,用于一个线程去暂停另一个线程的运行.就是一个正在运行的线程被其他线程给打断,停止运行挂起了. 我觉得,在Java中,这种中断机制只是一种方便程序员编写进程间的通信罢了. 如何中断 interrupt() 其他线程调用这一线程的这一方法来对其进程中断. isInterrupted() 当前线程通过这个方法来判断自己是否被中断了. interrupted() 调用静态方法对当前线程的中断标识进行复位 中断实现原理 中断的执行流程逻辑需要程序员自己完成. 每个线程对象都…
/*1.让各个对象或类相互灵活交流2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏3.中断状态就是冻结状态4.当主线程退出的时候,里面的两个线程都处于冻结状态,这样就卡住了5.try catch   有异常,catch就自动帮忙处理,程序继续运行6.让wait 中断  就会发生异常,就会被处理*/ /*stop方法已经过时. 如何停止线程?只有一种,run方法结束.开启多线程运行,运行代码通常是循环结构. 只要控制住循环,就可以让run方法结束,也就是…
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 第一种:继承Thread类 new Thread(){}.start();这表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread的匿名子类的实例对象,子类加上run方后的代码如下: new Thread(){ public void run(){ }}.start(); 第二种:实现Runnable接口 new Thread(new Runn…
第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到运行状态中来,这样就可以让操作标记来结束线程. Thread类提供了interrupt()方法. 守护线程: 线程对象.setDaemon():该方法表示,前台线程(主线程) 一结束,后台线程(后台运行线程)立即结束. Join方法: 等待该线程终止.就是说在主线程运行时候,读到了该线程的开始阶段,…
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run()方法,run()方法中的内容就是需要线程完成的任务. 2.创建一个任务类的对象,即创建了线程对象. 3.调用任务类对象的start()方法,来启动一个线程. 代码实例: public class TestThread extends Thread { public void run() { for…