- 浏览: 424933 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (318)
- js (20)
- JQuery (2)
- Java (46)
- Oracle (4)
- mysql (21)
- ExtJs (17)
- Excel (2)
- Linux (8)
- Sql (8)
- Jsp (2)
- hibernate (12)
- jbpm (17)
- eclipse (8)
- 名博收藏 (1)
- Junit (2)
- 应用集成 (3)
- web (10)
- jboss (3)
- Rest (3)
- 其它 (7)
- 磁盘分区管理 (1)
- spring (18)
- SSO (4)
- tomcat (4)
- CSS (7)
- MemCached (6)
- EhCache (4)
- weblogic (1)
- apache (6)
- Exception design (1)
- db (1)
- 分析模式 (1)
- jstl (1)
- jsf (0)
- firefox (2)
- MongoDB (4)
- androidpn (1)
- hadoop (1)
- cvs (1)
- 微信公众号 (2)
- 高并发 (4)
- 技术论坛 (1)
- CDN (1)
- JVM (16)
- 加密 (4)
- maven (2)
- jenkins (1)
- hessian (1)
- 大数据处理 (2)
- NIO (0)
- netty (1)
- redis (1)
- git (1)
- Elastic Job (0)
最新评论
-
zgw06629:
或者<pre>aaaabbbbcccc</p ...
javaDoc注释换行 -
ddnzero:
...
StringBuffer换行 -
maosijun:
。。。。
EXT CExt.form.ComboBox选择一次后只剩一个选项 -
ysa198584:
你这有问题,当我的代码出现User.class的时候,反编绎的 ...
java的class文件批量反编译 -
dongj0325:
看到您的博客,很受启发,但还有关于jbpm4.4 timer使 ...
JBPM定时器(Timer)之Repeat属性不能使用变量
对joint和interrupt理解的不够好,在中文的JDK参考手册上,说join是“等待该线程结束”,这里是不是该说成“等待正在执行的线程的结束”?。。因为在一些书上和论坛上看了都是说Join是在等待其他线程结束。。
以下是参考<<Java多线程模式>>的
1. sleep() & interrupt()
线程A正在使用sleep()暂停着: Thread.sleep(100000);
如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用
a.interrupt();
令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例
执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt().当sleep中的线程被调用interrupt()时,就会放弃暂停的状态.并抛出InterruptedException.丢出异常的,是A线程.
2. wait() & interrupt()
线程A调用了wait()进入了等待状态,也可以用interrupt()取消.
不过这时候要小心锁定的问题.线程在进入等待区,会把锁定解除,当对等待中的线程调用interrupt()时,会先重新获取锁定,再抛出异常.在获取锁定之前,是无法抛出异常的.
3. join() & interrupt()
当线程以join()等待其他线程结束时,一样可以使用interrupt()取消之.因为调用join()不需要获取锁定,故与sleep()时一样,会马上跳到catch块里.
4. interrupt()只是改变中断状态而已
interrupt()不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。
如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
线程A在执行sleep,wait,join时,线程B调用A的interrupt方法,的确这一个时候A会有InterruptedException异常抛出来.但这其实是在sleep,wait,join这些方法内部会不断检查中断状态的值,而自己抛出的InterruptedException。
如果线程A正在执行一些指定的操作时如赋值,for,while,if,调用方法等,都不会去检查中断状态,所以线程A不会抛出InterruptedException,而会一直执行着自己的操作.当线程A终于执行到wait(),sleep(),join()时,才马上会抛出InterruptedException.
若没有调用sleep(),wait(),join()这些方法,或是没有在线程里自己检查中断状态自己抛出InterruptedException的话,那InterruptedException是不会被抛出来的.
以下是参考<<Java多线程模式>>的
1. sleep() & interrupt()
线程A正在使用sleep()暂停着: Thread.sleep(100000);
如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用
a.interrupt();
令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例
执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt().当sleep中的线程被调用interrupt()时,就会放弃暂停的状态.并抛出InterruptedException.丢出异常的,是A线程.
2. wait() & interrupt()
线程A调用了wait()进入了等待状态,也可以用interrupt()取消.
不过这时候要小心锁定的问题.线程在进入等待区,会把锁定解除,当对等待中的线程调用interrupt()时,会先重新获取锁定,再抛出异常.在获取锁定之前,是无法抛出异常的.
3. join() & interrupt()
当线程以join()等待其他线程结束时,一样可以使用interrupt()取消之.因为调用join()不需要获取锁定,故与sleep()时一样,会马上跳到catch块里.
4. interrupt()只是改变中断状态而已
interrupt()不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。
如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
线程A在执行sleep,wait,join时,线程B调用A的interrupt方法,的确这一个时候A会有InterruptedException异常抛出来.但这其实是在sleep,wait,join这些方法内部会不断检查中断状态的值,而自己抛出的InterruptedException。
如果线程A正在执行一些指定的操作时如赋值,for,while,if,调用方法等,都不会去检查中断状态,所以线程A不会抛出InterruptedException,而会一直执行着自己的操作.当线程A终于执行到wait(),sleep(),join()时,才马上会抛出InterruptedException.
若没有调用sleep(),wait(),join()这些方法,或是没有在线程里自己检查中断状态自己抛出InterruptedException的话,那InterruptedException是不会被抛出来的.
发表评论
-
serialVersionUID的作用
2016-02-29 11:59 456serialVersionUID的作用 简单来说,J ... -
ArrayList实现原理
2015-08-20 09:32 3961. ArrayList概述: A ... -
HashMap实现原理分析
2015-08-20 09:12 545HashMap 目录(?)[+] 1. H ... -
高性能IO模型浅析
2015-08-05 16:42 348高性能IO模型浅析 2014- ... -
JVM调优总结 -Xms -Xmx -Xmn -Xss
2012-07-27 17:31 785http://unixboy.iteye.com/blog/1 ... -
消息总线设计系列之 - 调停者模式
2012-05-28 16:52 1235http://kb.cnblogs.com/a/1200926 ... -
关于Java构造器
2012-04-25 17:27 800关于Java构造器 作者:langm 版权声明:任何获得M ... -
面向对象的三个基本特征
2012-04-25 15:37 647转自: http://www.cnitblog.com/Li ... -
java 继承类 变量、静态变量、构造函数执行顺序
2012-04-18 16:01 888java 继承类 变量、静态变量、构造函数执行顺序 clas ... -
通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
2012-04-03 11:06 794http://www.ibm.com/developerwor ... -
hashtable源码解析
2012-04-01 22:45 710http://wenku.baidu.com/view/f42 ... -
java泛型
2012-03-27 11:27 714http://baike.baidu.com/view/143 ... -
Java中的Enum的使用与分析
2012-03-27 09:38 696Java中的Enum的使用与分析 示例: ... -
使用common-fileUpload制作文件上传(DiskFileItemFactory方式)
2012-02-23 09:50 1149使用common-fileUpload制作文件上传(DiskF ... -
java中静态代码块的用法 static用法详解(摘抄,用断点调试效果很好)
2011-07-23 11:28 1525原文:http://zhangyongbluesky.blog ... -
Java类的static块什么时候执行
2011-07-23 11:18 922http://joes0619.blog.163.com/bl ... -
JAXP(Java API XML Parser)
2011-07-16 14:20 655http://www.cnblogs.com/kelin131 ... -
static块到底什么时候执行?
2011-07-16 10:23 679http://www.iteye.com/topic/1100 ... -
Java Endorsed Standards Override Mechanism
2011-05-20 10:56 1025Introduction From time to time ... -
Java 类的热替换 —— 概念、设计与实现
2011-05-19 10:05 718构建基于 Java 的在线升级系统 孙 鸣, 软件 ...
相关推荐
- `wait()`是可中断的,当线程被中断(`Thread.interrupt()`)时,`wait()`会抛出`InterruptedException`,这时线程需要处理中断状态,决定是否继续等待或结束。 - 使用`wait()`时,应避免无限期等待,通常建议...
如果线程正在执行等待操作(如`sleep`、`wait`或`join`),则会抛出`InterruptedException`异常,从而打断这种阻塞状态。 ##### 2.2 方法签名 ```java public void interrupt(); ``` ##### 2.3 使用示例 下面是一...
如果线程正在阻塞(例如在调用`Thread.sleep()`, `Thread.join()`, 或者`Object.wait()`),这些方法在检测到中断状态时会抛出`InterruptedException`,并清除中断状态。这意味着线程必须自行处理`...
线程中常见的方法有`sleep`、`interrupt`、`isInterrupted`、`interrupted`、`park`、`yield`、`join`、`wait`和`notify`。`sleep`可以让线程进入等待状态,但不会释放锁。`interrupt`用于中断线程,尤其能打断`...
如果本线程是处于阻塞状态:调用线程的 wait() , wait(long) 或 wait(long, int) 会让它进入等待(阻塞)状态,或者调用线程的 join(),join(long),join(long, int),sleep(long),sleep(long, int) 也会让它进入...
当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此时调用线程的interrupt()将线程的中断标记设为true。由于处于阻塞状态,中断标记会被清除,同时产生一个InterruptedException异常。将...
`Thread.interrupt()`方法会设置线程的中断状态,并在当前线程调用`wait()`, `join()`, 或 `sleep()`时抛出`InterruptedException`。但在线程执行普通逻辑时,如循环或赋值操作,`interrupt()`并不会影响线程的执行...
本资源是关于操作系统课程设计实验报告,涵盖了 Nachos 操作系统的实现细节,包括 Join 方法、Condition 变量、Alarm 类、Communicator 类、PriorityScheduler 类和 Boat 类的实现。 一、Join 方法 Join 方法是 ...
在上述示例中,`TestIsAlive`展示了如何使用`isAlive()`方法检查线程是否运行,而`TestInterrupt`演示了`sleep()`和`interrupt()`的用法。当`Thread.sleep()`被`interrupt()`打断时,`InterruptedException`会被抛出...
例如,如果线程在等待对象的`wait()`方法,调用`sleep()`,或者在`join()`其他线程,那么这些方法在检测到中断状态时会抛出`InterruptedException`。这使得线程有机会捕获异常并采取适当的行动,通常这意味着结束...
线程的生命周期由`start()`、`run()`、`sleep()`、`join()`、`interrupt()`等方法共同控制。 理解并熟练掌握这些Java线程知识对于Java工程师来说至关重要,因为线程控制是多任务并行处理和系统优化的关键。在实际...
3. **禁止中断操作:** 在`join()`函数开始和结束时禁用中断,以防止在此期间发生不可预知的行为。 ```java boolean intStatus = Machine.interrupt().disable(); // ...其他操作... Machine.interrupt()....
- 当线程正在执行`sleep`、`wait`或者`join`等阻塞方法时,调用`interrupt`会抛出`InterruptedException`,从而使线程有机会捕获异常并退出。 - 另一种情况是,在循环中检查`isInterrupted`状态,当检测到中断时,...
- **线程处于阻塞状态**:如线程调用了 `sleep()` 或 `wait()` 方法。当调用 `interrupt()` 时,这些阻塞方法会抛出 `InterruptedException`,线程可以捕获这个异常并优雅地终止。 - **使用 `isInterrupted()` 检查...
Waiting:具有指定等待时间的等待线程的线程状态(sleep、wait、join、parkNanos、parkUntil) 6.Terminated:终止线程的线程状态。线程正常执行完成或出现异常 代码:Demo01 线程切换状态图 线程终止 不正确的线程...
Lock接口提供了lock(), unlock(), newCondition()等方法,Condition接口则提供了await(), signal()和signalAll()方法,类似于wait(), notify()和notifyAll()。 在实际开发中,正确使用这些线程通信机制可以避免数据...
`wait()`和`join()`需要在同步块或同步方法中调用,它们涉及到对象锁的释放和重新获取,而`sleep()`则不会释放任何锁。 6. **线程调度** `Thread.sleep()`可以用来调整线程调度策略,例如,让某些低优先级的线程在...
当线程因为调用wait()、sleep()或join()方法而阻塞时,可以通过调用线程的interrupt方法来中断线程,该方法会抛出InterruptedException,从而使线程醒来。需要注意的是,由于IO阻塞导致的线程阻塞不能通过这种方式...
而线程中断则是用来处理线程间的一种协作机制,通过调用线程对象的interrupt()方法来发送中断信号,被中断的线程在执行到下一个wait()、sleep()或join()调用时会抛出InterruptedException异常,或者可以调用Thread类...
如果线程正处于等待状态(例如通过调用`wait()`、`join()`或`sleep()`等方法),那么调用`interrupt`会导致该线程抛出`InterruptedException`异常。因此,在使用这些可能导致线程等待的方法时,通常需要处理`...