Java的多线程 --线程中断

  当线程的run方法执行方法体中的最后一条语句后,并由执行return语句返回时,或者出现了方法中没有捕获的异常时,线程将终止。

  有一种可以强制线程终止的方法:interrupt可以用来请求终止线程。当对一个线程调用interrupt方法时,线程的中断状态将被置位,每一个线程都具有boolean标记。每个线程都应该不时的检查这个标记,以判断线程十分被中断。

要想清楚中断状态十分被置位,首先调用静态的Thread.currentThread()方法获得当前线程,再调用isInterrupted
方法就可以判断的出来。一般格式是下面这样的

while(!Thread.currentThread().isInterrupted()&&more work to do)
{
//do more work
}

  我们要清楚线程中断,只不过是把线程打上一个标记,其实线程的状态还是可运行的(理解成还在运行中)。这样我可以决定如何响应中断。

   线程阻塞,那么isInterrupted实例方法就不能检测出中断标记,这样就会产生InterruptedException异常。

这种线程的run方法具体格式如下:


public void run()
{
try
{
//...
while(Thread.currentThread().isInterrupted()&&more work to do)
{
//do more work
}
}
catch(InterruptedException e)
{
}
finally
{

}
}

注意点: Thread中有几个相似的方法,大家一定要区分开。

1.void interrupt(): 向线程发生中断请求,线程的中断状态将被设置为true.

2.static boolean
interrupted():这个是静态方法,检测当前线程(正在执行这个命令的线程)是否被中断。同时它还会清楚当前线程的中断状态重置为flase.

3.boolean inInterrupted() 这个是实例方法,检查线程十分被中断,它不会重置线程的中断状态。

4.static Thread currentThread():返回代表当前线程的Thread对象。

时间: 2024-10-11 01:05:48

Java的多线程 --线程中断的相关文章

Java的多线程 --线程的状态

线程可以有6中状态. [1].New(新生) [2].Runnable(可运行) [3].Blocked(被阻塞) [4].Waiting(等待) [5].Timed Waiting(计时等待) [6].Terminated(被终止) 1.新生(New)线程: 当使用new 操作符创建一个先的线程,但该线程还没有调用start()方法.线程这个时候的状态就是新生,这个时候我们可以做些初始化之类的工作. 2.可运行(Runnable)线程: 一旦调用了start()方法,这个线程就处于可运行(Ru

Java的多线程 --线程的概念

Java的多线程--线程的概念 一个程序同时执行多个任务,通常,每个任务称之为线程(thread),她是线程控制的简称. 可以运行一个以上的任务的程序叫做多线程程序. 1.感觉线程和进程很像,那么他们的区别是什么? 其实他们是有本质的区别:每个进程拥有自己独立的一整套变量,而线程则共享数据. 2.在Java中怎么创建一个线程去执行一个任务. 主要有4个步骤. 1)将任务代码移到实现了Runnable接口类的run方法中,这个接口很简单,只有一个方法. public interface Runna

Java自学-多线程 线程池

Java 如何开发一个自定义线程池 每一个线程的启动和结束都是比较消耗时间和占用资源的. 如果在系统中用到了很多的线程,大量的启动和结束动作会导致系统的性能变卡,响应变慢. 为了解决这个问题,引入线程池这种设计思想. 线程池的模式很像 生产者消费者模式,消费的对象是一个一个的能够运行的任务 步骤 1 : 线程池设计思路 线程池的思路和生产者消费者模型是很接近的. 准备一个任务容器 一次性启动10个 消费者线程 刚开始任务容器是空的,所以线程都wait在上面. 直到一个外部线程往这个任务容器中扔了

黑马程序员--Java基础--多线程|线程同步

--Java培训.Android培训.iOS培训..Net培训 期待与您共同交流!-- 多线程基础.线程同步 1. 多线程基础 1.1. 进程和线程 1.1.1. 什么是进程 所谓进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元.进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问.线程只能归属于一个进程并且它只能访问该进程所拥有的资源.当操作系统创建一个进程后,该进程会自动

Java 并发:线程中断-interrupt

一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全.快速.可靠地停止下来,并不是一件容易的事.Java没有提供任何机制来安全地终止线程.但它提供了(Interruption),这是一种协作机制,能够使一个线程终止另一个线程的当前工作 如上提到的是协作,而不是强制.因为如果需要被中断的线程任务实现没有准守这样的协作约定,那么其他线程就没有办法通过in

java的多线程:线程基础

1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务.通常由操作系统负责多个线程的调度和执行. 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下可以释放一些珍贵的资源如内存占用等等. 如果有

java的多线程:线程安全问题

什么是线程安全? 为什么有线程安全问题? 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题.但是做读操作是不会发生数据冲突问题. 抢火车的例子: 一号窗口和二号窗口同时出售火车第九九张,部分火车票会重复出售. 结论发现,多个线程共享同一个全局成员变量时,做写的操作可能会发生数据冲突问题. 二.线程安全解决办法: 问:如何解决多线程之间线程安全问题 答:使用多线程之间同步synchronized或使用锁(lock). 问:为什么使用线程同步或使

JAVA 线程基本知识汇总--线程中断

1.线程中断的结果专业术语 isInterrupted interrupted interrupt // 测试当前线程是否已经中断,同时会将线程的中断状态取消 Thread.interrupted(); // 在当前线程加上一个打断标记 ** 并不会真的立即停止线程 thread.interrupt(); // 测试线程是否已经中断 thread.isInterrupted(); 2.知识点: 直接调用interrupt 不会中断线程 package org.test; /*  * 线程中断演示

Java基础-多线程-②多线程的安全问题

什么是线程的安全问题? 上一篇 Java基础-多线程-①线程的创建和启动 我们说使用实现Runnable接口的方式来创建线程,可以实现多个线程共享资源: 1 class Dog implements Runnable { 2 // 定义线程共享数据 3 private int t = 100; 4 5 @Override 6 public void run() { 7 // TODO:死循环,暂不处理 8 while (true) { 9 if (t > 0) { 10 11 System.ou