1. 程式人生 > >java多執行緒—執行緒的基本介紹

java多執行緒—執行緒的基本介紹

程序和執行緒:     程序是程式的一次動態執行過程,經歷了從程式碼的載入、執行到執行完畢的一個完整的過程,這個過程也是程序本身從產生、發展到最終消亡的過程。     多執行緒是實現併發機制的一種有效手段。程序和執行緒一樣,都是實現併發的一個基本單位。 java實現多執行緒:   ·繼承Thread類     ·實現Runnable介面 繼承Thread類:(java.lang) 多執行緒操作類:繼承了Thread類的類,必須明確的覆寫Thread類中的run()方法,次方法為執行緒的主體。 多執行緒的定義語法:     class 類名稱 extends Thread{             屬性;
            方法;             //覆寫Thread類中的run()方法,此方法是執行緒的主體             public void run(){                 執行緒的主體;             }     } 啟動執行緒:start() 方法-->最終呼叫的還是run() 檢視java.lang.Thread類,找到start()方法:  public synchronized void start() {    if (threadStatus != 0)             throw new IllegalThreadStateException();         group.add(this);         boolean started = false;         try {             start0();
            started = true;         } finally {             try {                 if (!started) {                     group.threadStartFailed(this);                 }             } catch (Throwable ignore) {             }         }     }     private native void start0(); start()會丟擲異常 native關鍵字表示由java呼叫本機作業系統函式的一個關鍵字。在java中,執行JAVA程式呼叫本機的作業系統的函式以完成特定功能。 想要實現多執行緒操作,需要作業系統的支援,因為多執行緒會搶佔CPU資源,等待CPU排程,這一點需要作業系統的底層支援,所以用native關鍵字呼叫本機系統函式。而在不同的作業系統中多執行緒的實現底層程式碼肯定是不同的,所以用native關鍵字讓JVM去調整不同的JVM來實現。 Runnable介面:
在java中也可以通過實現Runnable介面的方式實現多執行緒,Runnable介面中只定義了一個抽象方法:     public void run(); 通過Runnable介面實現多執行緒:     class類名稱 implements Runnable{     屬性;     方法;     public void run(){         執行緒主體;     } } 在Runnable介面中沒有sttart()方法,可以通過例項化Thread類物件實現: class MyThread implements Runnable {  private String name; //定義執行緒名稱  public MyThread(String name){   this.name=name;  }  public void run(){   for(int i=0;i<10;i++){    System.out.println(name+"執行,i="+i);   }  } } public class RunnableDemo {  public static void main(String args[]){   MyThread mt1 = new MyThread("執行緒A"); //例項化物件   MyThread mt2 = new MyThread("執行緒B");   Thread t1 = new Thread(mt1); //例項化Thread類物件   Thread t2 = new Thread(mt2);   t1.start();   t2.start(); //啟動多執行緒  } } Thread類與Runnable介面的關係     Thread類定義:
public class Thread
extends Objectimplements Runnable
從以上定義格式可以發現,Thread類也是Runnable介面的子類。
Thread類與Runnable介面的區別 使用Thread類操作多執行緒,無法達到資源共享 Runnable介面可以實現資源共享
使用Thread類實現:
class MyThread extends Thread { private int ticket = 5; //總共5張票 public void run(){ for(int i=0;i<100;i++){ if(this.ticket>0){ System.out.println("賣票:ticket="+ticket--); } } } } public class RunnableDemo { public static void main(String args[]){ MyThread mt1 = new MyThread(); MyThread mt2 = new MyThread(); MyThread mt3 = new MyThread(); mt1.run(); mt2.run(); mt3.run(); } }
程式執行結果:

3個程序各自賣自己的5張票
使用Runnable介面實現
class MyThread implements Runnable { private int ticket = 5; //總共5張票 public void run(){ for(int i=0;i<100;i++){ if(this.ticket>0){ System.out.println("賣票:ticket="+ticket--); } } } } public class RunnableDemo { public static void main(String args[]){ MyThread mt = new MyThread(); MyThread mt1 = new MyThread(); new Thread(mt,"售票口一").start(); //呼叫執行緒主體 new Thread(mt,"售票口二").start(); } }
執行結果:
兩個串列埠同事賣5張票。

多執行緒的執行緒狀態:
建立狀態:準備好了一個多執行緒物件: Thread t = new Thread()就緒狀態:呼叫了start()方法,等待CPU呼叫執行狀態:執行Run()方法阻塞狀態:暫時停止執行,可以將資源交給其他執行緒使用終止狀態:執行緒執行完畢了,不再使用