启动和终止线程

返回主页面

https://blog.csdn.net/xu__cg/article/details/52831127

理解中断

中断可以理解为线程的一个标识位属性,它表示一个运行中的线程是否被其他线程进行了中断操作(通过调用该线程的interrupt()进行操作)。

运行中的线程自身通过检查是否被中断进行响应,

1.线程通过isInterrupted()来进行判断是否被中断

2.线程调用静态方法Thread.interrupted()对当前线程的中断标识位进行复位。

如果该线程处于终结状态,即使该线程被中断过,在调用该线程对象的isInterrupted()时依旧为返回false.

许多声明抛出InterruptedException的方法(例如 Thread.sleep(long millis)方法)这些方法抛出InterruptedException之前,java虚拟机会先将该线程的中断标示位清除,然后抛出interruptedException,此时调用isInterrupted()方法将会返回false.

package com.qdb.thinkv.thread.base;

import java.util.concurrent.TimeUnit;

import com.qdb.thinkv.thread.utils.SleepUtils;

public class Interrupted {

    public static void main(String[] args) throws Exception {
        //Sleep不停的尝试睡眠
        Thread sleepThread=new Thread(new SleepRunner(),"SleepRunner");
        sleepThread.setDaemon(true);
        //Busy不停的运行
        Thread busyThread=new Thread(new BusyRunner(),"BusyRunner");
        busyThread.setDaemon(true);

        sleepThread.start();
        busyThread.start();

        //休眠5秒
        TimeUnit.SECONDS.sleep(5);
        sleepThread.interrupt();
        busyThread.interrupt();

        System.out.println("SleepThread interrupted is "+sleepThread.isInterrupted());
        System.out.println("BusyThread interrupted is "+busyThread.isInterrupted());

        SleepUtils.second(2);
    }

    static class SleepRunner implements    Runnable {
        public void run() {
            while(true){
                SleepUtils.second(10);
            }
        }
    }

    static class BusyRunner implements    Runnable {
        public void run() {
            while(true){
            }
        }
    }

}

原文地址:https://www.cnblogs.com/tianzhiyun/p/9557423.html

时间: 2024-08-08 07:15:00

启动和终止线程的相关文章

Qt学习之如何启动和终止一个线程

先来给出每个文件的相关代码然后再加以分析 Cpp代码   //*************dialog.h**************// #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #define MAXSIZE 5  //最大的线程数 class QDialogButtonBox; class QProgressBar; class QPushButton; class WorkThread; class ThreadDlg : 

多线程基础二(线程的启动、终止,线程面临的三种问题)

一.线程的启动.终止方式 启动: start native(调用外部接口启动) 终止:    stop(类似kill,暴力终止)  interrupt 中断的方式 通过指令的方式 volatile boolean stop = false; public class InterruptDemo { private static int i; public static void main(String[] args) { Thread thread = new Thread(()->{ whil

C# CancellationTokenSource 终止线程

我们在多线程中通常使用一个bool IsExit类似的代码来控制是否线程的运行与终止,其实使用CancellationTokenSource来进行控制更为好用,下面我们将介绍CancellationTokenSource相关用法. C# 使用 CancellationTokenSource 终止线程 使用CancellationTokenSource对象需要与Task对象进行配合使用,Task会对当前运行的状态进行控制(这个不用我们关心是如何孔控制的).而CancellationTokenSou

第5章 进程环境(2)_进程的启动和终止

2. 进程启动和终止 2.1 C程序启动过程 (1)启动例程 ①是一段程序代码,放置在/lib/libc.so.***中.编译器在编译时会将启动例程的代码编译进可执行文件中. ②可执行程序将这段嵌入的启动例代码指代为程序的起始地址. ③当内核执行C程序时(使用exec函数),在调用main前先执行启动例程代码. (2)启动例程的作用 ①搜集命令行的参数传递给main函数中的argc和argv ②搜集环境信息构建环境表并传递给main函数 ③登记进程的终止函数 2.2 进程终止   进程终止 主要

java线程中断和终止线程运行

ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程中断机制来实现. 首先来看Thread类三个和中断有关的方法: public class Thread { // 发出一个中断请求,把标志位设定为中断状态,不会终止线程运行. // 其他线程试图调用该方法,会检测是否有权限中断该线程(正常情况 // 下不会存在权限问题,这里可以忽略) public

Java并发编程-如何终止线程

我们知道使用stop().suspend()等方法在终止与恢复线程有弊端,会造成线程不安全,那么问题来了,应该如何正确终止与恢复线程呢?这里可以使用两种方法: 1.使用interrupt()中断方法. 2.使用volatile boolean变量进行控制. 在使用interrupt方法之前,有必要介绍一下中断以及与interrupt相关的方法.中断可以理解为线程的一个标志位属性,表示一个运行中的线程是否被其他线程进行了中断操作.这里提到了其他线程,所以可以认为中断是线程之间进行通信的一种方式,简

C# CancellationTokenSource 终止线程 CancellationTokenSource实现对超时任务的取消

C# 使用 CancellationTokenSource 终止线程 使用CancellationTokenSource对象需要与Task对象进行配合使用,Task会对当前运行的状态进行控制(这个不用我们关心是如何孔控制的).而CancellationTokenSource则是外部对Task的控制,如取消.定时取消. 下面我们来看看示例代码 class Program { //声明CancellationTokenSource对象 static CancellationTokenSource c

《Java并发编程》之线程中断与终止线程运行

Java中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程中断机制来实现. 首先来看Thread类三个和中断有关的方法: public class Thread { // 发出一个中断请求,把标志位设定为中断状态,不会终止线程运行. // 其他线程试图调用该方法,会检测是否有权限中断该线程(正常情况 // 下不会存在权限问题,这里可以忽略) public

C# 使用 CancellationTokenSource 终止线程

http://blog.csdn.net/hezheqiang/article/details/51966511 我们在多线程中通常使用一个 C# 使用 CancellationTokenSource 终止线程 使用CancellationTokenSource对象需要与Task对象进行配合使用,Task会对当前运行的状态进行控制(这个不用我们关心是如何孔控制的).而CancellationTokenSource则是外部对Task的控制,如取消.定时取消. 下面我们来看看示例代码 class P