线程信息、中断、等待与休眠(二)
2017-04-07 22:33
357 查看
1.线程信息设置
Thead类有一些保存信息的属性,这些属性可以用来标识线程。
ID:保存了线程的唯一标识符
Name:保存线程名称
Priority:保存线程对象的优先级。线程的优先级从1到10,其中1是最低级线程;10是最高优先级。我们并不推荐修改线程的优先级,然而,在需要的时候,也可以这么做。
Status:保存线程的状态。在Java中,线程的状态有6中:new、runnable、blocked、waiting、time waiting或者terminated
(摘录Java7并发编程实战手册 第一章1.3节)
2.线程中断
如果你试图取消一个某个线程正在运行的任务,就需要结束这个线程。
Java提供了中断机制,这个机制需要线程检查它是否被中断了,然后决定是否响应中断请求。
3.等待线程结束
当一个线程调用其他线程的join()方法时该线程将等待其他线程执行完毕;Java另外提供了两种形式的join()方法:
1.join(long milliseconds)
2.join(long milliseconds,long nanos)
例如,thread1中有thread2.join(1000),thread将挂起运行,直到达成以下条件之一,join()方法将返回:
1.thread完成运行
2.时间已过去1000MS
4.线程休眠
(在休眠期间该线程调用中断方法时,休眠会抛出InterruptedException错误结束休眠)
1.调用Thread.sleep(X)方法,传入参数为long型单位为MS
2.调用TimeUnit抽象方法
TimeUnit.SECONDS.sleep(X); 单位为S的休眠
TimeUnit.MINUTES.sleep(X);单位为M的休眠
TimeUnit.HOURS.sleep(X);单位为H的休眠
TimeUnit.DAYS.sleep(X);单位为D的的休眠
Thead类有一些保存信息的属性,这些属性可以用来标识线程。
ID:保存了线程的唯一标识符
Name:保存线程名称
Priority:保存线程对象的优先级。线程的优先级从1到10,其中1是最低级线程;10是最高优先级。我们并不推荐修改线程的优先级,然而,在需要的时候,也可以这么做。
Status:保存线程的状态。在Java中,线程的状态有6中:new、runnable、blocked、waiting、time waiting或者terminated
(摘录Java7并发编程实战手册 第一章1.3节)
2.线程中断
如果你试图取消一个某个线程正在运行的任务,就需要结束这个线程。
Java提供了中断机制,这个机制需要线程检查它是否被中断了,然后决定是否响应中断请求。
package baozi.chapter1.section1_6; public class Demo extends Thread { @Override public void run() { // TODO Auto-generated method stub //while (true) { //判别线程是否中断,并做出响应 //if(Thread.interrupted()){ //System.out.println("The Prime demo has been Interrupted"); // return; //} //判别线程是否中断,并做出响应 if(this.isInterrupted()){ System.out.println("The Prime demo has been Interrupted"); return; } } } public static void main(String[] args) { Thread thread=new Demo(); thread.start(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //调用线程中断 thread.interrupt(); } }
3.等待线程结束
当一个线程调用其他线程的join()方法时该线程将等待其他线程执行完毕;Java另外提供了两种形式的join()方法:
1.join(long milliseconds)
2.join(long milliseconds,long nanos)
例如,thread1中有thread2.join(1000),thread将挂起运行,直到达成以下条件之一,join()方法将返回:
1.thread完成运行
2.时间已过去1000MS
package baozi.chapter1.section7.等待线程终止; import java.util.Date; import java.util.concurrent.TimeUnit; /** * 中断线程的join方式 * * @author Administrator * */ public class Test { public static void main(String[] args) { Test test = new Test(); test.init(); } private void init() { // TODO Auto-generated method stub DataSourcesLoader loader = new DataSourcesLoader(); NetworkConnectionLoader loader2 = new NetworkConnectionLoader(); Thread thread = new Thread(loader, "DataSourcesLoader"); Thread thread2 = new Thread(loader2, "DataSourcesLoader"); thread.start(); thread2.start(); try { thread.join(); thread2.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.err.printf("Mian: Configuration has bean loaded : %s\n", new Date()); } } class NetworkConnectionLoader implements Runnable { @Override public void run() { // TODO Auto-generated method stub // for (int i = 0; i <5; i++) { System.out.printf("Beginning data sources loding: %s\n", new Date()); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.printf("Data sources loading has finished: %s\n", new Date()); // } } } class DataSourcesLoader implements Runnable { @Override public void run() { // TODO Auto-generated method stub System.out.printf("Beginning data sources loding: %s\n", new Date()); try { TimeUnit.SECONDS.sleep(4); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.printf("Data sources loading has finished: %s\n", new Date()); } }
4.线程休眠
(在休眠期间该线程调用中断方法时,休眠会抛出InterruptedException错误结束休眠)
1.调用Thread.sleep(X)方法,传入参数为long型单位为MS
2.调用TimeUnit抽象方法
TimeUnit.SECONDS.sleep(X); 单位为S的休眠
TimeUnit.MINUTES.sleep(X);单位为M的休眠
TimeUnit.HOURS.sleep(X);单位为H的休眠
TimeUnit.DAYS.sleep(X);单位为D的的休眠
相关文章推荐
- Java并发编程-02-线程的中断,休眠和等待线程的终止
- 线程的休眠与等待 区别(转)
- 线程的休眠和中断
- SQL点滴13—收集SQLServer线程等待信息
- 主线程wait等待子线程返回对象信息
- 第三部分 线程的休眠和中断
- SQL点滴13—收集SQLServer线程等待信息
- 【Boost】boost库中thread多线程详解11——线程的休眠和中断
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积
- 003-线程其他【命名和取得、休眠、优先级、线程状态、线程中断】
- 操作线程的方法:休眠、挂起、中断
- 线程加入,休眠,中断,礼让操作
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的
- 第三部分 线程的休眠和中断
- sql server线程等待信息
- 收集SQLServer线程等待信息
- 第三部分 线程的休眠和中断
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到
- sql server线程等待信息
- JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程