程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA線程控制,java線程

JAVA線程控制,java線程

編輯:JAVA綜合教程

JAVA線程控制,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();
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved