JAVA线程控制

  可以通过线程的方法进行基本的线程控制,除了已知的start、run、sleep方法外还有isAlive、currentThread、interrupt方法。

isAlive:该方法用来测试线程是否处于活动状态。线程由start方法启动后,直至被终止之间的任何时刻都处于Alive状态。当处于新建状态和死亡状态时,该方法返回false。

currentThread:该方法是Thread类的的类方法,返回正在使用CPU资源的线程。

interrupt:当线程处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程调用interrupt方法唤醒自己,导致休眠的线程发生InterruptedException异常结束休眠,重新排队等待CPU资源。

class A implements Runnable{
    Thread student,teacher;
    A(){
        teacher=new Thread(this,"王教授");
        student=new Thread(this,"张三");
    }
    
    public void run(){
        if(Thread.currentThread()==student){
            try{
                System.out.println(student.getName()+"正在睡觉,不听课");
                Thread.sleep(1000*60*60);
            }catch(InterruptedException e){
                System.out.println(student.getName()+"被老师叫醒了");
            }
        }
        else if(Thread.currentThread()==teacher){
            for(int i=1;i<=3;i++){
                System.out.println("上课!");
            }try{
                Thread.sleep(500);
            }catch(InterruptedException e){}
            student.interrupt();
        }
    }
}

public class BasicControlThread{
    public static void main(String args[]){
        A a=new A();
        a.student.start();
        a.teacher.start();
    }
}

 

此外还有stop和join方法

stop():通过调用线程的实例方法stop()来终止线程,终止后即进入死亡状态,不能再被调度。

join():一个线程在占有CPU资源期间,可以让其他线程调用join()方法和本线程联合。当前线程等待调用该方法线程结束后,再重新排队等待CPU资源,以便恢复执行。

class TV{
    float price;
    String name;
    TV(String name,float price){
        this.price=price;
        this.name=name;
    }
}


class ThreadJoin implements Runnable{
    TV tv;
    Thread customer,tvMaker;
    ThreadJoin(){
        customer=new Thread(this,"顾客");
        tvMaker=new Thread(this,"电视制造商");
    }
    public void run(){
        if(Thread.currentThread()==customer){
            System.out.println(customer.getName()+"等"+tvMaker.getName()+"生产电视机");
            try{
                tvMaker.join();//线程customer开始等待tvMaker结束
            }catch(InterruptedException e){ }
            System.out.println(customer.getName()+"买了一台电视机"+tv.name+"价格:"+tv.price);    
        }
        else if(Thread.currentThread()==tvMaker){
            System.out.println(tvMaker.getName()+"开始生产电视机...");
            try{
                tvMaker.sleep(2000);
            }catch(InterruptedException e){ }
            tv=new TV("长虹牌",4500);
            System.out.println(tvMaker.getName()+"生产完毕!!!");
        }
    }
}

public class JoinThread{
    public static void main(String args[]){
        ThreadJoin th=new ThreadJoin();
        th.customer.start();
        th.tvMaker.start();
    }
}

 

posted @ 2016-08-13 09:43  生成风  阅读(4159)  评论(5编辑  收藏  举报