- 浏览: 357752 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
tianshawang:
楼主你好偏心啊,把代码给谷歌不给这里
java 实现windows资源管理器 -
tianshawang:
其实我是也想要资源管理器的代码来的。。
java 实现windows资源管理器 -
hcmfys:
lonuery 写道open file 是获取要进行复制的文件 ...
JAVA 复制 带进度条 时间 百分比 -
qq657052171:
怎么没有代码呢?
java 实现windows资源管理器 -
IT女民工:
楼主,求资源管理器代码~~~~
java 实现windows资源管理器
最近在学习Java线程相关的东西,和大家分享一下,有错误之处欢迎大家指正.
假如我们有一个任务如下,交给一个Java线程来执行,如何才能保证调用interrupt()来中断它呢?
Java代码
运行这个程序,我们发现调用interrupt()后,程序仍在运行,如果不强制结束,程序将一直运行下去,如下所示:
Java代码
虽然中断发生了,但线程仍然在进行,离开线程有两种常用的方法:
抛出InterruptedException和用Thread.interrupted()检查是否发生中断,下面分别看一下这两种方法:
1.在阻塞操作时如Thread.sleep()时被中断会抛出InterruptedException(注意,进行不能中断的IO操作而阻塞和要获得对象的锁调用对象的synchronized方法而阻塞时不会抛出InterruptedException)
Java代码
程序运行结果如下:
Java代码
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
可以看到中断任务时让任务抛出InterruptedException来离开任务.
2.Thread.interrupted()检查是否发生中断.Thread.interrupted()能告诉你线程是否发生中断,并将清除中断状态标记,所以程序不会两次通知你线程发生了中断.
Java代码
程序运行结果如下:
Java代码
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
我们可结合使用两种方法来达到可以通过interrupt()中断线程.请看下面例子:
Java代码
在point1之前处point2之后发生中断会产生两种不同的结果,可以通过修改InterruptTaskTest main()里的Thread.sleep()的时间来达到在point1之前产生中断或在point2之后产生中断.
如果在point1之前发生中断,程序会在调用Thread.sleep()时抛出InterruptedException从而结束线程.这和在Thread.sleep()时被中断是一样的效果.程序运行结果可能如下:
Java代码
I am running!
Calculating
I am running!
Calculating
I am running!
Calculating
I am running!
****************************
Interrupted Thread!
****************************
Exiting by Exception
ATask.run() interrupted!
I am running!
Calculating
I am running!
Calculating
I am running!
Calculating
I am running!
****************************
Interrupted Thread!
****************************
Exiting by Exception
ATask.run() interrupted!
如果在point2之后发生中断,线程会继续执行到下一次while判断中断状态时.程序运行结果可能如下:
Java代码
I am running!
Calculating
I am running!
Calculating
I am running!
Calculating
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kjniuzemin2003/archive/2009/06/30/4309876.aspx
假如我们有一个任务如下,交给一个Java线程来执行,如何才能保证调用interrupt()来中断它呢?
Java代码
class ATask implements Runnable{ private double d = 0.0; public void run() { //死循环执行打印"I am running!" 和做消耗时间的浮点计算 while (true) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } //给线程调度器可以切换到其它进程的信号 Thread.yield(); } } } public class InterruptTaskTest { public static void main(String[] args) throws Exception{ //将任务交给一个线程执行 Thread t = new Thread(new ATask()); t.start(); //运行一断时间中断线程 Thread.sleep(100); System.out.println("****************************"); System.out.println("Interrupted Thread!"); System.out.println("****************************"); t.interrupt(); } } class ATask implements Runnable{ private double d = 0.0; public void run() { //死循环执行打印"I am running!" 和做消耗时间的浮点计算 while (true) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } //给线程调度器可以切换到其它进程的信号 Thread.yield(); } } } public class InterruptTaskTest { public static void main(String[] args) throws Exception{ //将任务交给一个线程执行 Thread t = new Thread(new ATask()); t.start(); //运行一断时间中断线程 Thread.sleep(100); System.out.println("****************************"); System.out.println("Interrupted Thread!"); System.out.println("****************************"); t.interrupt(); } }
运行这个程序,我们发现调用interrupt()后,程序仍在运行,如果不强制结束,程序将一直运行下去,如下所示:
Java代码
...... I am running! I am running! I am running! I am running! **************************** Interrupted Thread! **************************** I am running! I am running! I am running! I am running! I am running! .... ...... I am running! I am running! I am running! I am running! **************************** Interrupted Thread! **************************** I am running! I am running! I am running! I am running! I am running! ....
虽然中断发生了,但线程仍然在进行,离开线程有两种常用的方法:
抛出InterruptedException和用Thread.interrupted()检查是否发生中断,下面分别看一下这两种方法:
1.在阻塞操作时如Thread.sleep()时被中断会抛出InterruptedException(注意,进行不能中断的IO操作而阻塞和要获得对象的锁调用对象的synchronized方法而阻塞时不会抛出InterruptedException)
Java代码
class ATask implements Runnable{ private double d = 0.0; public void run() { //死循环执行打印"I am running!" 和做消耗时间的浮点计算 try { while (true) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } //休眠一断时间,中断时会抛出InterruptedException Thread.sleep(50); } } catch (InterruptedException e) { System.out.println("ATask.run() interrupted!"); } } } class ATask implements Runnable{ private double d = 0.0; public void run() { //死循环执行打印"I am running!" 和做消耗时间的浮点计算 try { while (true) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } //休眠一断时间,中断时会抛出InterruptedException Thread.sleep(50); } } catch (InterruptedException e) { System.out.println("ATask.run() interrupted!"); } } }
程序运行结果如下:
Java代码
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
可以看到中断任务时让任务抛出InterruptedException来离开任务.
2.Thread.interrupted()检查是否发生中断.Thread.interrupted()能告诉你线程是否发生中断,并将清除中断状态标记,所以程序不会两次通知你线程发生了中断.
Java代码
class ATask implements Runnable{ private double d = 0.0; public void run() { //检查程序是否发生中断 while (!Thread.interrupted()) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } } System.out.println("ATask.run() interrupted!"); } } class ATask implements Runnable{ private double d = 0.0; public void run() { //检查程序是否发生中断 while (!Thread.interrupted()) { System.out.println("I am running!"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } } System.out.println("ATask.run() interrupted!"); } }
程序运行结果如下:
Java代码
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
I am running!
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
我们可结合使用两种方法来达到可以通过interrupt()中断线程.请看下面例子:
Java代码
class ATask implements Runnable{ private double d = 0.0; public void run() { try { //检查程序是否发生中断 while (!Thread.interrupted()) { System.out.println("I am running!"); //point1 before sleep Thread.sleep(20); //point2 after sleep System.out.println("Calculating"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } } } catch (InterruptedException e) { System.out.println("Exiting by Exception"); } System.out.println("ATask.run() interrupted!"); } } class ATask implements Runnable{ private double d = 0.0; public void run() { try { //检查程序是否发生中断 while (!Thread.interrupted()) { System.out.println("I am running!"); //point1 before sleep Thread.sleep(20); //point2 after sleep System.out.println("Calculating"); for (int i = 0; i < 900000; i++) { d = d + (Math.PI + Math.E) / d; } } } catch (InterruptedException e) { System.out.println("Exiting by Exception"); } System.out.println("ATask.run() interrupted!"); } }
在point1之前处point2之后发生中断会产生两种不同的结果,可以通过修改InterruptTaskTest main()里的Thread.sleep()的时间来达到在point1之前产生中断或在point2之后产生中断.
如果在point1之前发生中断,程序会在调用Thread.sleep()时抛出InterruptedException从而结束线程.这和在Thread.sleep()时被中断是一样的效果.程序运行结果可能如下:
Java代码
I am running!
Calculating
I am running!
Calculating
I am running!
Calculating
I am running!
****************************
Interrupted Thread!
****************************
Exiting by Exception
ATask.run() interrupted!
I am running!
Calculating
I am running!
Calculating
I am running!
Calculating
I am running!
****************************
Interrupted Thread!
****************************
Exiting by Exception
ATask.run() interrupted!
如果在point2之后发生中断,线程会继续执行到下一次while判断中断状态时.程序运行结果可能如下:
Java代码
I am running!
Calculating
I am running!
Calculating
I am running!
Calculating
****************************
Interrupted Thread!
****************************
ATask.run() interrupted!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kjniuzemin2003/archive/2009/06/30/4309876.aspx
发表评论
-
Java服务器的JSON数据包三重加密算法(转载)
2015-06-03 19:30 1308mina的粘包拆包其实是蛮简单的,只是一开始没搞清楚原理。 J ... -
java ssl (转载)
2014-12-25 17:50 831某项目的业务系统要求 ... -
table
2014-05-27 00:13 806table ... -
java 删除目录
2013-08-01 21:45 882import java.io.File; pub ... -
负载均衡方法
2013-06-05 22:26 1083•随机:负载均衡方法 ... -
&#x 格式数据转换
2013-05-22 11:52 3126import java.io.UnsupportedEnc ... -
Java数据库连接
2012-11-22 10:42 847Java数据库连接(JDBC)由一组用 Java 编程语言编写 ... -
http post
2012-10-31 11:51 945package test.net; import ... -
Java proxy 代理访问网络(转)
2012-10-31 10:12 1493How to make your Java applicati ... -
java版mini编辑器
2012-10-11 15:40 879习惯用Editplus来查看源代码,但是没有代码导航功能,想看 ... -
java excel 导入
2011-12-16 18:04 2233import java.io.FileNotFoundExce ... -
excel 导入
2011-12-16 18:03 1099package *.*; import java.uti ... -
EVAL_BODY_INCLUDE
2011-08-09 10:19 1404EVAL_BODY_INCLUDE:把Body读入存在的输出流 ... -
jrebel的使用
2011-07-06 18:21 973-noverify -javaagent:E:\jrebe ... -
java 实现windows资源管理器
2011-06-27 00:00 2174最近在使用linux的界面,有时候觉得界面很难用,不如wind ... -
Linux下java环境变量设置的完整步骤
2010-10-29 13:32 996从java.sun.com上下载JDK的安装文件,一般是jdk ... -
设置头部,直接下载文件
2010-09-26 10:34 1041string dir = SysSetting.Wave ... -
java 地图查看器
2010-07-25 23:07 1201/** * @(#)GisApp.java * ... -
中国移动 联通 电信 模拟网关服务器
2010-03-29 21:55 2005/Files/hcmfys/SngServer.rar -
basic64
2010-02-09 14:29 1772using System; using System. ...
相关推荐
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Java线程Thread之interrupt中断解析 Java线程Thread之interrupt中断机制是...Java线程Thread之interrupt中断机制是一种重要的机制,通过设置中断标记,可以控制线程的执行,并且可以避免使用stop方法对线程的中断。
### Java线程中断机制详解:`interrupt`与`stop`方法 #### 一、引言 在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种...
在 Java 中,线程(Thread)类提供了三个相关的方法:interrupt、isInterrupted 和 interrupted,这三个方法都是用于处理线程的中断状态的。下面我们将详细介绍这三个方法的用法和区别。 interrupt 方法 interrupt...
《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
Java的线程提供了中断机制,通过`Thread.interrupt()`和`Thread.isInterrupted()`方法来控制和检查线程中断状态。在长时间运行的任务中,应定期检查中断标志,一旦检测到中断,及时清理资源并退出。 ```java ...
`sleep()`方法让线程进入堵塞状态,`join()`方法等待线程执行完成,`yield()`方法让当前线程让出CPU,`stop()`方法停止线程(不推荐使用,因为可能引起数据不一致),`interrupt()`方法中断线程,以及`wait()`和`...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...
Java线程与并发编程实践是Java开发者必备的技能之一,特别是在多核处理器和高并发应用环境中,有效地管理和利用线程能极大地提升程序的性能。本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,...
9. **线程中断**:通过`interrupt()`方法设置线程的中断标志,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求。 10. **线程Local变量**:`ThreadLocal`类为每个线程提供独立的变量副本,...
线程的生命周期包括新建、就绪、运行、阻塞和终止等状态,理解这些状态以及如何在这些状态之间转换是理解和使用Java线程的基础。 书中可能涵盖了以下几个关键知识点: 1. **线程的创建与启动**:通过创建Thread...
Java提供了一些方法来控制线程状态,如`sleep()`使线程暂停执行一段时间,`join()`等待指定线程结束,`yield()`让当前线程暂停,让其他相同优先级的线程有机会执行,`interrupt()`用于中断线程。 同步是Java线程...
如果超时,当前线程将恢复执行,并且可以通过调用`interrupt`来中断目标线程(但这并不意味着目标线程会立即停止,它可能需要在内部检查`isInterrupted()`或捕获`InterruptedException`来响应中断)。 在设计多线程...
- `interrupt()`: 标记线程为中断状态,线程在检查到中断标志时可以决定如何响应。 - `synchronized`: 关键字用于同步访问共享资源,防止数据不一致性。 了解并熟练掌握这些线程操作是编写高效并发程序的基础。在...
9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...
6. **线程中断与停止**:正确地停止线程是一项挑战,Java提供了interrupt()方法来请求线程中断,但需要注意的是,这并不一定能立即停止线程,需要配合中断标志进行检查和处理。 7. **线程池**:Executor框架和...
Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的语言中。在Java中,线程被用来实现程序中的并行操作,使得一个应用程序可以同时执行多个不同的任务。线程允许程序在处理一个任务的同时,也能响应...
Java中的多线程允许并发执行多个任务,而中断机制是Java提供的一种优雅地停止线程执行的方式。`Thread.interrupt()`方法是中断线程的主要手段,但它的行为并不像字面意义上那样直接终止线程。相反,它通过设置线程的...