`
lighter
  • 浏览: 498606 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

interrupt方法点滴记录

阅读更多
1、sleep方法与interrupt方法

假如线程A像下面这样,使用线程的sleep()方法暂停着.
Thread.sleep(10000);
这时候线程B,会执行下面的语句,要求B放弃等待操作.
a.interrupt(); //a是线程A的实例

在这里使用的interrupt方法,是Thread类的实例方法.执行interrupt方法时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt方法.
当sleep中的线程被调用interrupt方法时,就会放弃暂停的状态.并抛出InterruptedException.丢出异常的,是A线程.

2、wait方法与interrupt方法

   当线程A以wait方法等待时,与sleep一样可以取消.使用interrupt方法,可以对wait中的线程传达"不用等notify了,从等待区出来"的意图.
   线程B执行下面的语句后,与sleep时一样,线程A会抛出InterruptedException异常.
  
a.interrupt();

   当线程wait时,要小心锁定的问题.线程在进入等待区,会把锁定解除,当对wait中的线程调用interrupt时,会先重新获取锁定,再抛出异常.在获取锁定之前,是无法抛出异常的.

3、Join方法与interrupt方法

  当线程以join方法等待其他线程结束时,一样可以使用interrupt方法取消之.因为调用join方法不需要获取锁定,故与sleep时一样,会马上跳到catch块里.

4、interrupt方法只是改变中断状态而已
线程A在执行sleep,wait,join时,线程B调用A的interrupt方法,的确这一个时候A会有InterruptedException异常抛出来.但这其实是在sleep,wait,join这些方法内部会不断检查中断状态的值,而自己抛出的InterruptedException。





















分享到:
评论
3 楼 baby2080 2008-08-08  
try{
Thread.sleep(10000);
}
catch (InterruptedException ex)
{
r3.interrupt();
}
我觉得是在这句里面,因为,没有InterruptedException 所以应该不会去执行
r3.interrupt(); 但是,这样想得话,又是错的,因为会打出10个日期之后会打出一个空格,所以我觉得,还是r3的线程没有结束!帮我看下吧,谢谢
2 楼 baby2080 2008-08-08  
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package testthread;

import java.util.Date;

/**
*
* @author stu
*/
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

////    // TODO code application logic here
//      Runner1 r = new Runner1();
//////        //方法调用,并没有启动新线程
//////        r.run();
//        Thread t = new Thread(r);
//        t.start();
////////        Runner2 r2 = new Runner2();
////////        r2.start();
//        for (int i = 0; i < 100; i++) {
//            System.out.println("Main Thread :----" + i);
//        }
//        MyThread my = new MyThread();
//        my.start();
//        try {
//            Thread.sleep(10000);
//        } catch (InterruptedException ex) {
//            my.interrupt();
//        }
//      
//        for (int i = 0; i < 10; i++) {
//            System.out.println("Main Thread :----" + i);
//        }
    MyThread r3 = new MyThread();
    r3.start();
    try{
    Thread.sleep(10000);
    }
    catch (InterruptedException ex)
    {
        r3.interrupt();
    }
     System.out.println("");
     return;
    }
   
  
    }

class MyThread extends Thread {

    public void run() {

        while (true) {
            System.out.println("----" + new Date() + "----");
            try {
                sleep(1000);
            } catch (InterruptedException ex) {
                return;
            }
          
        }
      
    }
}

    class Runner1 implements Runnable {

        public void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println("Rnner1 : " + i);
            }
        }
    }

//    class Runner2 extends Thread {
//
//        public void run() {
//            for (int i = 0; i < 100; i++) {
//                System.out.println("Rnner1 : " + i);
//            }
//        }
//    }
上面得没排版
1 楼 baby2080 2008-08-08  
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package testthread;

import java.util.Date;

/**
*
* @author stu
*/
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

////    // TODO code application logic here
//      Runner1 r = new Runner1();
//////        //方法调用,并没有启动新线程
//////        r.run();
//        Thread t = new Thread(r);
//        t.start();
////////        Runner2 r2 = new Runner2();
////////        r2.start();
//        for (int i = 0; i < 100; i++) {
//            System.out.println("Main Thread :----" + i);
//        }
//        MyThread my = new MyThread();
//        my.start();
//        try {
//            Thread.sleep(10000);
//        } catch (InterruptedException ex) {
//            my.interrupt();
//        }
//      
//        for (int i = 0; i < 10; i++) {
//            System.out.println("Main Thread :----" + i);
//        }
    MyThread r3 = new MyThread();
    r3.start();
    try{
    Thread.sleep(10000);
    }
    catch (InterruptedException ex)
    {
        r3.interrupt();
    }
     System.out.println("");
     return;
    }
   
  
    }

class MyThread extends Thread {

    public void run() {

        while (true) {
            System.out.println("----" + new Date() + "----");
            try {
                sleep(1000);
            } catch (InterruptedException ex) {
                return;
            }
          
        }
      
    }
}

    class Runner1 implements Runnable {

        public void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println("Rnner1 : " + i);
            }
        }
    }

//    class Runner2 extends Thread {
//
//        public void run() {
//            for (int i = 0; i < 100; i++) {
//                System.out.println("Rnner1 : " + i);
//            }
//        }
//    }

帮我看下这个例子,视频上的例子,说是输出10个日期后停下来,但是,我在Netbeans下执行不行,会在输出10个日期后停下,完后继续执行

相关推荐

    java线程中的interrupt,isInterrupt,interrupted方法

    java 线程中的 interrupt,isInterrupt,interrupted 方法详解 在 Java 中,线程(Thread)类提供了三个相关的方法:interrupt、isInterrupted 和 interrupted,这三个方法都是用于处理线程的中断状态的。下面我们将...

    Interrupt.X_interrupt_

    在嵌入式系统开发中,中断(Interrupt)是硬件与软件之间进行通信的重要机制,它使得微控制器能够及时响应外部事件,而无需持续轮询。本文将深入探讨使用MPLABX集成开发环境和XC8编译器进行中断处理的例子。 标题...

    09.多线程编程基础-停止线程-使用interrupt方法中断线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Interrupt方法结束线程

    `interrupt()`方法是Java提供的用于中断线程执行的关键工具,但它的行为并非如许多人所理解的那样直接结束线程。下面是关于`interrupt()`方法以及线程中断机制的详细解析: 1. **线程的中断状态**: - 线程中断...

    Thread.interrupt()方法的使用以及使用它退出线程

    Thread.interrupt()方法的使用以及使用它退出线程

    Generic Interrupt Controller 2.0

    The Generic Interrupt Controller (GIC) architecture defines: • the architectural requirements for handling all interrupt sources for any processor connected to a GIC • a common interrupt controller ...

    qnx interrupt function

    IRQ interrupt function driver

    解释 void timer0() interrupt 1 using 2

    ### 解释 void timer0() interrupt 1 using 2 在探讨`void timer0() interrupt 1 using 2`这一表达式之前,我们首先需要理解它所处的上下文——80C51单片机系统及其编程环境。80C51是一款广泛应用于嵌入式系统的微...

    interrupt中断

    处理器响应中断后,会保存当前任务的状态,跳转到预先定义的中断服务程序(ISR,Interrupt Service Routine)执行相应的操作,处理完事件后再恢复先前的任务,这就是中断的上下文切换。 在基于DSP的系统中,中断...

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法、yield()方法、join方法、interrupt()方法

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...

    Interrupt in Linux(硬件篇).pdf

    Remote IRR (Interrupt Request Register)是IOAPIC中的一个重要寄存器,用于记录由IOAPIC接收但尚未被目标LAPIC确认的中断请求。当IOAPIC接收到一个新的中断请求时,它会在RemoteIRR中设置相应位来表示这个中断还未...

    ARM Generic Interrupt Spec

    该文档提供了对GIC架构的详细描述,并记录了与之相关的所有变更信息。 #### 专有声明 文档中的商标或注册商标(标有®或™)均属ARM Limited在欧盟和其他国家/地区所有,除非另有声明。其他品牌和名称可能是各自...

    com interrupt void interrupt 4 using 3

    在IT领域,"com interrupt void interrupt 4 using 3" 这个描述涉及到的是中断服务子程序(Interrupt Service Routine, ISR),这是在微处理器系统中处理外部硬件事件的一种机制。这里的“com”可能指的是串行通信...

    Detection of Excessive Interrupt Disablement

    Detection of Excessive Interrupt Disablement - a new feature which can detect a period of excessive interrupt disablement on a CPU, and create an error log record to report it. This allows you to know...

    电子-7interrupt.pdf

    文档详细介绍了中断的配置方法,包括使能和禁用中断、设置中断优先级、配置中断服务例程等。通过操作INTEN寄存器,可以控制外设中的哪种event触发中断,允许设置多个event同时触发中断。INTEN寄存器中的每一位对应...

    微机接口课程实验interrupt.asm

    微机接口课程实验interrupt.asm

    Polyspace不认识Interrupt,肿么办?

    ### Polyspace与中断处理:让Polyspace认识Interrupt #### 一、引言 在嵌入式系统开发过程中,中断处理是不可或缺的一部分。中断可以让系统在特定条件下响应外部事件,从而实现高效的实时处理能力。然而,在进行...

    interrupt(飞思卡尔)

    在飞思卡尔HCS12系列微控制器中,中断系统是其核心功能之一,用于处理来自硬件设备的异步事件。中断处理控制是系统实时性和响应能力的关键因素。以下是关于中断处理机制的详细说明: 1. **中断默认状态**: ...

    interrupt_key.zip_interrupt key

    在这个“interrupt_key.zip_interrupt key”项目中,我们关注的是如何在TQ2440嵌入式平台上通过外部中断来控制LED灯的程序。 TQ2440是一款基于ARM926EJ-S内核的SoC(系统级芯片),常用于开发板和嵌入式系统设计。...

    Ralf Brown's Interrupt List

    Ralf Brown的中断列表就详细记录了这些中断以及它们对应的处理程序,对开发者来说是宝贵的资源。 这份列表涵盖了从8086到更高级处理器的DOS中断,包括INT 0x00到INT 0xFF的所有中断服务。每个中断都列出了其功能、...

Global site tag (gtag.js) - Google Analytics