您的位置:首页 > 编程语言 > Java开发

线程信息、中断、等待与休眠(二)

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提供了中断机制,这个机制需要线程检查它是否被中断了,然后决定是否响应中断请求。

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 线程
相关文章推荐