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

  • 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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值