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的的休眠
10万+

被折叠的 条评论
为什么被折叠?



