线程stop和Interrupt】的更多相关文章

一.关于终止线程stop与interrupt 一般来说,线程执行结束后就变成消亡状态,乍看之下我们并不需要人为进行干预(人为停止线程),不过凡事都有例外吧,在服务器或者其他应用场景下,线程为了提供服务而一直在不停的运转,因此必要时刻我们还需“人为干涉的”. 通常情况下,终止线程有两种方式:stop与interrupt 1) stop:暴力的停止线程(不管线程执行到哪段代码,立刻干掉),这个方法因为过于暴力会导致安全问题,因此JDK不推荐使用. 2) interrupt:优雅停止,调用该方法会通知…
Java多线程系列--“基础篇”08之 join() 概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479275.html 1. join()介绍 join() 定义在Thread.java中.join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行.这句话可能有…
关于Java多线程知识可以看看<Thinking in Java >中的多线程部分和<Java网络编程>中第5章多线程的部分 以下是参考<<Java多线程模式>>的 1. sleep() & interrupt()     线程A正在使用sleep()暂停着: Thread.sleep(100000);     如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用         a.interrupt();     令线程A放弃睡眠操…
(一).关于interrupt()     interrupt()并不直接中断线程,而是设定一个中断标识,然后由程序进行中断检查,确定是否中断.     1. sleep() & interrupt()    线程A正在使用sleep()暂停着: Thread.sleep(100000);    如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用a.interrupt();    令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例执行interrupt()时,并不需要获…
Java线程的终止——interrupt 取消/关闭的场景 我们知道,通过线程的start方法启动一个线程后,线程开始执行run方法,run方法运行结束后线程退出,那为什么还需要结束一个线程呢?有多种情况,比如说: 很多线程的运行模式是死循环,比如在生产者/消费者模式中,消费者主体就是一个死循环,它不停的从队列中接受任务,执行任务,在停止程序时,我们需要一种”优雅”的方法以关闭该线程. 在一些图形用户界面程序中,线程是用户启动的,完成一些任务,比如从远程服务器上下载一个文件,在下载过程中,用户可…
这一章节我们来讨论一下线程中断(interrupt). 1.什么是线程中断(interrupt)? 就是在多线程执行的时候,我们给线程贴上一个中断的标记.可是不要求线程终止. 2.样例: 中断的样例: package com.ray.ch17; public class Test2 { public static void main(String[] args) { PrintA printA = new PrintA(); Thread threadA = new Thread(printA)…
来源:http://blog.csdn.net/wxwzy738/article/details/8516253 程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误. 在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 背景     中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作.线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个程序…
线程对象.interrupt() 注意,异常分析中要有break,否则无法中断 public class Demo extends JFrame { private Thread thread;//定义线程 final JProgressBar progressBar = new JProgressBar();//进度条 public Demo() { setBounds(100, 100, 200, 100); setDefaultCloseOperation(WindowConstants.…
在上篇文章<多线程的使用——Thread类和Runnable接口>中提到中断线程的问题.在JAVA中,曾经使用stop方法来停止线程,然而,该方法具有固有的不安全性,因而已经被抛弃(Deprecated).那么应该怎么结束一个进程呢?官方文档中对此有详细说明:<为何不赞成使用 Thread.stop.Thread.suspend 和 Thread.resume?>.在此引用stop方法的说明: 1. Why is Thread.stop deprecated? Because it…
在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下 (1)interrupt:置线程的中断状态 (2)isInterrupt:线程是否中断 (3)interrupted:返回线程的上次的中断状态,并清除中断状态 举个例子: 用法: class MyThread extends Thread { ...... ...... public void run() { try { while(!Thread.currentThread().isInterrupted()) { //…
一:stop终止线程 举例子: public class ThreadStop { public static int i; public static int j; public static void main(String[] args) throws InterruptedException { ThreadStop stop = new ThreadStop(); stop.test(); } public void test() throws InterruptedException…
一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等. 所以你看到Thread.suspend, Thread.stop等方法都被Deprecated了 那么不能直接把一个线程搞挂掉, 但有时候又有必要让一个线程死掉, 或者让它结束某种等待的状态 该怎么办呢?一个比较优雅而安全的做法是:使用等待/通知机制或者给那个线程一个中断信号, 让它自己决定该怎么办. 等待/通过机制在另一篇博客中详细的介绍了.这里我…
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态”的线程3. 终止线程的示例4. interrupted() 和 isInterrupted()的区别 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479949.html 1. interrupt()说明 在介绍终止线程的方式之前,有必要先对inter…
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于"阻塞状态"的线程2.2 终止处于"运行状态"的线程3. 终止线程的示例4. interrupted() 和 isInterrupted()的区别 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479949.html 1. interrupt()说明 在介绍终止线程的…
线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们需要了解何为中断(interrupt): 1.中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现: 2.每个线程对象中都有一个标识,用于表示线程是否被中断:该标识位为true表示中断,为false表示未中断: 3.通过调用线程对象的interrupt方法将该线程的…
一.interrupt() 说明 interrupt()的作用是中断本线程.本线程中断自己是被允许的:其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限.这有可能抛出SecurityException异常.如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(long, int)会让它进入等待(阻塞)状态,或者调用线程的join(), join(long), join(long, int), sleep(long), slee…
interrupt() 说明 interrupt()的作用是中断本线程. 本线程中断自己是被允许的:其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限.这有可能抛出SecurityException异常. 如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(long, int)会让它进入等待(阻塞)状态,或者调用线程的join(), join(long), join(long, int), sleep(long), slee…
一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全.快速.可靠地停止下来,并不是一件容易的事.Java没有提供任何机制来安全地终止线程.但它提供了(Interruption),这是一种协作机制,能够使一个线程终止另一个线程的当前工作 如上提到的是协作,而不是强制.因为如果需要被中断的线程任务实现没有准守这样的协作约定,那么其他线程就没有办法通过in…
一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个程序本身.线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true).它并不像stop方法那样会中断一个正在运行的线程. 判断线程是否被中断 判断某个线程是否已被发送过中断请求,请使用Thread.currentThread().isInterrupted()方法(因为它将…
java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说:                        Thread.sleep(),Thread.wait()或者I/O等)起作用,对于非阻塞方法不起任何作用. 每个线程都会有一个中断标志位(且当作是interrupt status吧),这个状态位默认为false状态,即非中断状态.当一个线程执行一个阻塞方法的时候,阻塞方法内部会…
线程阻塞状态与等待状态(当一个线程处于被阻塞或等待状态时,它暂时不活动,不允许任何代码且消耗最少的资源) 当一个线程试图获得一个内部的对象锁(而不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态 当一个线程等待另一个线程通知调度器的一个条件时,它自己进入等待状态.在调用Object.wait方法或Thread.join方法,或者是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况.实际上被阻塞状态与等…
1. interrupt()说明 在介绍终止线程的方式之前,有必要先对interrupt()进行了解.关于interrupt(),java的djk文档描述如下:http://docs.oracle.com/javase/7/docs/api/ Interrupts this thread. Unless the current thread is interrupting itself, which is always permitted, the checkAccess method of t…
以下是参考<<Java多线程模式>>的 1. sleep() & interrupt() 线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.interrupt(); 令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例 执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt().当sleep中的线…
四.Object类简介 Object类是所有类的超类,之所以放在线程部分是因为其方法很多是和线程有关的.比如以下三个: wait()方法.wait(long timeout)和wait(long timeout,int naos) 此外,notify()和notifyAll()分别唤醒在该对象上等待的某个线程和在该对象上等待的所有线程.(某个是哪个?) wait()和notify()以及notifyAll()接下来还会在展开详细的讲解. getClass()方法,居然有final属性,不可重写(…
首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行. interrupted()方法 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false. isInterrupted()方法 作用是只测试此线程是否被中断 ,不清除中断状态  下面我们进行测试说明: 定义一个MyThr…
启动线程: 从一个最基本的面试题开始,启动线程到底是start()还是run()? Runnable runnable = () -> System.out.println(Thread.currentThread().getName()); Thread thread = new Thread(runnable); thread.run(); thread.start(); 结果: main Thread-0 我们可以看到thread.run()是通过main线程执行的,而start()启动的…
Java 多线程基础(十)interrupt()和线程终止方式 一.interrupt() 介绍 interrupt() 定义在 Thread 类中,作用是中断本线程. 本线程中断自己是被允许的:其它线程调用本线程的 interrupt() 方法时,会通过 checkAccess() 检查权限.这有可能抛出 SecurityException 异常.如果本线程是处于阻塞状态:调用线程的 wait() , wait(long) 或 wait(long, int) 会让它进入等待(阻塞)状态,或者调…
前言 在java编程中,我们经常会调用Thread.sleep()方法使得线程停止运行一段时间,而Thread类中也提供了interrupt方法供我们去主动打断一个线程.那么线程挂起和打断的本质究竟是什么,本文就此问题作一个探究. 本文主要分为以下几个部分 1.interrupt的使用特点 2.jvm层面上interrupt方法的本质 3.ParkEvent对象的本质 4.Park()对象的本质 5.利用jni实现一个可以被打断的MyThread类 1.interrupt的使用特点 我们先看2个…
GitHub源码地址 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止.所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了.Java Thread.interrupt()方法所提供的线程中断,实际就是从线程外界,修改线程内部的一个标志变量,或者让线程中的一些阻塞方法,抛出InterruptedException.…
一 正常结束. package com.aaa.threaddemo; /* 一 终止线程的四种方式? * 程序运行结束,线程终止. * */ public class ThreadTermination { public static void main(String[] args) { // 正常方式 把线程放入到thread中, 调用start方法. Thread thread = new Thread(new Runnable() { public void run() { System…