多线程常用方法(二)

本文介绍了Java中线程的基本控制方法,包括线程的休眠、中断、后台运行及优先级设置等。通过示例代码详细解释了如何使用Thread类的相关方法实现这些功能。

线程的休眠
在线程中允许一个线程进行暂时的休眠,直接使用Thread.sleep()方法即可。
sleep定义格式:

public static void sleep(long milis,int nanos)
       throws InterruptedException

首先,static,说明可以由Thread类名称调用,其次throws表示如果有异常要在调用此方法处处理异常。所以sleep()方法要有InterruptedException 异常处理,而且sleep()调用方法通常为Thread.sleep(500) ;形式。

示例:

class MyThread implements Runnable{    // 实现Runnable接口
    public void run(){    // 覆写run()方法
        for(int i=0;i<50;i++){
            try{
                    Thread.sleep(500) ;    // 线程休眠
            }catch(InterruptedException e){}
            System.out.println(Thread.currentThread().getName()
                    + "运行,i = " + i) ;    // 取得当前线程的名字
        }
    }
};
public class demo1{
    public static void main(String args[]){
        MyThread mt = new MyThread() ;    // 实例化Runnable子类对象
        Thread t = new Thread(mt,"线程");        // 实例化Thread对象
        t.start() ;    // 启动线程
    }
};

线程的中断
一个线程可以被另一个线程中断其操作的状态,使用interrupt()方法完成。

class MyThread implements Runnable{    // 实现Runnable接口
    public void run(){    // 覆写run()方法
        System.out.println("1、进入run()方法") ;
        try{
                Thread.sleep(10000) ;    // 线程休眠10秒
                System.out.println("2、已经完成了休眠") ;
        }catch(InterruptedException e){
            System.out.println("3、休眠被终止") ;
        }
        System.out.println("4、run()方法正常结束") ;
    }
};
public class demo1{
    public static void main(String args[]){
        MyThread mt = new MyThread() ;    // 实例化Runnable子类对象
        Thread t = new Thread(mt,"线程");        // 实例化Thread对象
        t.start() ;    // 启动线程
        try{
                Thread.sleep(2000) ;    // 线程休眠2秒
        }catch(InterruptedException e){
            System.out.println("3、休眠被终止") ;
        }
        t.interrupt() ;    // 中断线程执行
    }
};

后台线程
在java中,只要一个线程没有执行完(一个线程在运行),则整个Java的进程不会消失,所以此时可以设置一个后台线程,这样即使java线程结束了,则后台线程仍旧会继续执行,要想实现这个操作,要使用setDaemon(Boolean b)方法完成。

class MyThread implements Runnable{    // 实现Runnable接口
    public void run(){    // 覆写run()方法
     int i=0;
        while(true){    //设置死循环,这样来实现线程不断运行,设置后台运行。
            System.out.println(Thread.currentThread().getName() + "在运行。"+i) ;
        }
    }
};
public class ThreadDaemonDemo{
    public static void main(String args[]){
        MyThread mt = new MyThread() ;    // 实例化Runnable子类对象
        Thread t = new Thread(mt,"线程");        // 实例化Thread对象
        t.setDaemon(true) ;    // 此线程在后台运行
        t.start() ;    // 启动线程
    }
};

线程的优先级
获取优先级的方法:getPriority();
优先级分为最低,最高,普通三个(Thread.MIN_PRIORITY,Thread.MAX_PRIORITY,Thread.NORM_PRIORITY),

设置优先级:
MyThread t1=new MyThread();
Thread t3 = new Thread(t1,”线程C”) ;//实例化线程对象
t3.setPriority(Thread.MIN_PRIORITY) ;//设置优先级为最低

示例:

class MyThread implements Runnable{    // 实现Runnable接口
    public void run(){    // 覆写run()方法
        for(int i=0;i<5;i++){
            try{
                    Thread.sleep(500) ;    // 线程休眠
            }catch(InterruptedException e){}
            System.out.println(Thread.currentThread().getName()
                    + "运行,i = " + i) ;    // 取得当前线程的名字        }
    }
};public class demo1{
    public static void main(String args[]){
        Thread t1 = new Thread(new MyThread(),"线程A") ;    // 实例化线程对象
        Thread t2 = new Thread(new MyThread(),"线程B") ;    // 实例化线程对象
        Thread t3 = new Thread(new MyThread(),"线程C") ;    // 实例化线程对象
        t1.setPriority(Thread.MIN_PRIORITY) ;    // 优先级最低
        t2.setPriority(Thread.MAX_PRIORITY) ;    // 优先级最低
        t3.setPriority(Thread.NORM_PRIORITY) ;    // 优先级最低
        t1.start() ;    // 启动线程
        t2.start() ;    // 启动线程
        t3.start() ;    // 启动线程    }
};

线程的礼让
yield()方法实现线程的礼让。

class MyThread implements Runnable{    // 实现Runnable接口
    public void run(){    // 覆写run()方法
        for(int i=0;i<5;i++){
            try{
                Thread.sleep(500) ;  //休眠一下
            }catch(Exception e){}
            System.out.println(Thread.currentThread().getName()
                    + "运行,i = " + i) ;    // 取得当前线程的名字
            if(i==2){
                System.out.print("线程礼让:") ;
                Thread.currentThread().yield() ;    // 首先获取当前线程,然后线程礼让
            }
        }
    }
};
public class demo1{
    public static void main(String args[]){
        MyThread my = new MyThread() ;    // 实例化MyThread对象
        Thread t1 = new Thread(my,"线程A") ;
        Thread t2 = new Thread(my,"线程B") ;
        t1.start() ;
        t2.start() ;
    }
};

参考博客:http://www.cnblogs.com/alsf/p/5651888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值