- 浏览: 500220 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
来这里学java:
...
实战篇:设计自己的Annotation -
yushui2000:
突然想到一种方法,就是1、2、2、3、4、5作为5个球(类似彩 ...
一道算法题目,值得一看 -
wst0350:
理解力
实战篇:设计自己的Annotation -
yingzhor:
楼下的,你看看代码不就知道怎么验证了吗?这不是放在sessio ...
利用servlet生成简单的验证码 -
ming_7755:
妙用Commons良药<三>
1、sleep方法与interrupt方法
假如线程A像下面这样,使用线程的sleep()方法暂停着.
在这里使用的interrupt方法,是Thread类的实例方法.执行interrupt方法时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt方法.
当sleep中的线程被调用interrupt方法时,就会放弃暂停的状态.并抛出InterruptedException.丢出异常的,是A线程.
2、wait方法与interrupt方法
当线程A以wait方法等待时,与sleep一样可以取消.使用interrupt方法,可以对wait中的线程传达"不用等notify了,从等待区出来"的意图.
线程B执行下面的语句后,与sleep时一样,线程A会抛出InterruptedException异常.
当线程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。
假如线程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的线程没有结束!帮我看下吧,谢谢
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);
// }
// }
// }
上面得没排版
* 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个日期后停下,完后继续执行
* 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个日期后停下,完后继续执行
发表评论
-
读源码之旅 有意思的Integer类
2010-02-01 09:33 2184Integer类里面有如下一段 ... -
读源码之旅 java.io包
2010-01-28 16:11 2317对于下图,研究了一下常用的InputStream,ByteAr ... -
从自身体会谈一谈测试
2008-01-21 13:05 1977论坛上关于测试的帖子 ... -
The Contract for Equality[java]
2008-01-14 20:43 1568As we Know,The Java API documen ... -
来改善你的switch语句
2007-12-26 13:10 2805善用多态来改善你的switch语句 下面举的 ... -
java动态代理笔录
2007-12-22 15:14 2429大家都清楚Spring的AOP方面工作是很优秀,但是其内 ... -
url传递中文参数笔录
2007-12-21 19:35 4271url传递中文参数笔录 ... -
小心给servlet忽悠了
2007-12-05 18:53 2303你真的会写线程安全的s ... -
ThreadLocal浅解
2007-12-01 13:16 2266如果有看到spring的一些源码的同学都知道,Threa ... -
体会Observer/Observable模式
2007-11-23 19:20 3163在现在的项目中,后台有一块程序感觉用Observer/Obse ... -
Java 5.0多线程编程学习资料笔录
2007-11-23 13:33 3836对于Java 5.0多线程编程的学习,可以参考一下网上的下面的 ... -
关于ClassLoader工作机制小记
2007-11-06 23:06 2320类装载器就是寻找类或接口字节文件进行解析并构造JVM内部对象表 ... -
web应用程序开发须注意私自启动线程的问题
2007-11-04 01:25 3227web应用程序开发注意私自启动线程的问题 我们知道静态变量是 ... -
wait方法是在什么时候结束
2007-10-23 11:07 2910wait方法是在什么时候结束 1、当notify方法执行时 ... -
synchronized 笔记
2007-10-18 11:04 2902synchronized 笔记 1、synchronized ... -
该用notify 方法还是notifyAll方法
2007-10-18 10:15 2282选择notify的话,因为要唤醒的线程比较少,程序处理速度当然 ... -
有趣而简单的两段代码
2007-09-04 20:40 2202假如你想写一个小程序,保证字符串首尾两个字符是一样的,你可以如 ... -
正则表达式[浅例学习]
2007-07-17 16:19 2111举下面一段代码: public\\s+void\\s+test ... -
熟悉一下几个常用的eclipse快捷键
2007-07-16 13:03 1880在论坛里看到一个帖子,是Godlikeme在这一个帖子写的 h ... -
线程间通信一小例学习
2007-06-16 13:41 3430wait:告诉线程放弃监视器并进入睡眠状态,直到其他线程进入同 ...
相关推荐
java 线程中的 interrupt,isInterrupt,interrupted 方法详解 在 Java 中,线程(Thread)类提供了三个相关的方法:interrupt、isInterrupted 和 interrupted,这三个方法都是用于处理线程的中断状态的。下面我们将...
在嵌入式系统开发中,中断(Interrupt)是硬件与软件之间进行通信的重要机制,它使得微控制器能够及时响应外部事件,而无需持续轮询。本文将深入探讨使用MPLABX集成开发环境和XC8编译器进行中断处理的例子。 标题...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Thread.interrupt()方法的使用以及使用它退出线程
`interrupt()`方法是Java提供的用于中断线程执行的关键工具,但它的行为并非如许多人所理解的那样直接结束线程。下面是关于`interrupt()`方法以及线程中断机制的详细解析: 1. **线程的中断状态**: - 线程中断...
### 解释 void timer0() interrupt 1 using 2 在探讨`void timer0() interrupt 1 using 2`这一表达式之前,我们首先需要理解它所处的上下文——80C51单片机系统及其编程环境。80C51是一款广泛应用于嵌入式系统的微...
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 ...
IRQ interrupt function driver
处理器响应中断后,会保存当前任务的状态,跳转到预先定义的中断服务程序(ISR,Interrupt Service Routine)执行相应的操作,处理完事件后再恢复先前的任务,这就是中断的上下文切换。 在基于DSP的系统中,中断...
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...
Remote IRR (Interrupt Request Register)是IOAPIC中的一个重要寄存器,用于记录由IOAPIC接收但尚未被目标LAPIC确认的中断请求。当IOAPIC接收到一个新的中断请求时,它会在RemoteIRR中设置相应位来表示这个中断还未...
该文档提供了对GIC架构的详细描述,并记录了与之相关的所有变更信息。 #### 专有声明 文档中的商标或注册商标(标有®或™)均属ARM Limited在欧盟和其他国家/地区所有,除非另有声明。其他品牌和名称可能是各自...
在IT领域,"com interrupt void interrupt 4 using 3" 这个描述涉及到的是中断服务子程序(Interrupt Service Routine, ISR),这是在微处理器系统中处理外部硬件事件的一种机制。这里的“com”可能指的是串行通信...
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...
文档详细介绍了中断的配置方法,包括使能和禁用中断、设置中断优先级、配置中断服务例程等。通过操作INTEN寄存器,可以控制外设中的哪种event触发中断,允许设置多个event同时触发中断。INTEN寄存器中的每一位对应...
微机接口课程实验interrupt.asm
在飞思卡尔HCS12系列微控制器中,中断系统是其核心功能之一,用于处理来自硬件设备的异步事件。中断处理控制是系统实时性和响应能力的关键因素。以下是关于中断处理机制的详细说明: 1. **中断默认状态**: ...
在这个“interrupt_key.zip_interrupt key”项目中,我们关注的是如何在TQ2440嵌入式平台上通过外部中断来控制LED灯的程序。 TQ2440是一款基于ARM926EJ-S内核的SoC(系统级芯片),常用于开发板和嵌入式系统设计。...
Ralf Brown的中断列表就详细记录了这些中断以及它们对应的处理程序,对开发者来说是宝贵的资源。 这份列表涵盖了从8086到更高级处理器的DOS中断,包括INT 0x00到INT 0xFF的所有中断服务。每个中断都列出了其功能、...
### Polyspace与中断处理:让Polyspace认识Interrupt #### 一、引言 在嵌入式系统开发过程中,中断处理是不可或缺的一部分。中断可以让系统在特定条件下响应外部事件,从而实现高效的实时处理能力。然而,在进行...