1. 程式人生 > >執行緒、程序相關操作

執行緒、程序相關操作

一、概念

1、程序(process

狹義定義:程序就是一段程式的執行過程。

廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

簡單的來講程序的概念主要有兩點第一,程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。第二

,程序是一個“執行中的程式”。程式是一個沒有生命的實體,只有處理器賦予程式生命時,它才能成為一個活動的實體,我們稱其為程序。

程序狀態:程序有三個狀態,就緒、執行和阻塞。就緒狀態其實就是獲取了出cpu外的所有資源,只要處理器分配資源就可以馬上執行。就緒狀態有排隊序列什麼的,排隊原則不再贅述。執行態就是獲得了處理器分配的資源,程式開始執行。阻塞態,當程式條件不夠時候,需要等待條件滿足時候才能執行,如等待i/o操作時候,此刻的狀態就叫阻塞態。

2、程式

說起程序,就不得不說下程式。先看定義:程式是指令和資料的有序集合,其本身沒有任何執行的含義,是一個靜態的概念。而程序則是在處理機上的一次執行過程,它是一個動態的概念。這個不難理解,其實程序是包含程式的,程序的執行離不開程式,程序中的文字區域就是程式碼區,也就是程式。

3、執行緒

通常在一個程序中可以包含若干個執行緒,當然一個程序中至少有一個執行緒,不然沒有存在的意義。執行緒可以利用程序所擁有的資源,在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位,由於執行緒比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統多個程式間併發執行的程度。

4、多執行緒

在一個程式中,這些獨立執行的程式片段叫作“執行緒”(Thread),利用它程式設計的概念就叫作“多執行緒處理”。多執行緒是為了同步完成多項任務,不是為了提高執行效率,而是為了提高資源使用效率來提高系統的效率。執行緒是在同一時間需要完成多項任務的時候實現的。

最簡單的比喻多執行緒就像火車的每一節車廂,而程序則是火車。車廂離開火車是無法跑動的,同理火車也不可能只有一節車廂。多執行緒的出現就是為了提高效率。

二、實現

1.繼承Thread類,重寫run方法

public class Demo1 extends Thread{
    public Demo1(){
        //編寫子類的構造方法
    }
    public void run(){
        //編寫執行緒相關的內容
        //獲取執行緒的名稱
        System.out.println(Thread.currentThread().getName());
    }
    public static void main(String[] args){ 
        ThreadDemo01 Demo1 = new Demo1(); 
        threadDemo01.setName("Demo1");
        threadDemo01.start();//啟動執行緒 
    }
}
 

程式輸出:Demo1

該類建立執行緒的方式沒有返回值,因為這裡是繼承類Thread類中的run是void的

2.實現Runnable介面,重寫run方法,實現Runnable介面的實現類的例項物件作為Thread建構函式的target

public class Demo2 {

    public static void main(String[] args){ 
        System.out.println(Thread.currentThread().getName());
        Thread t1 = new Thread(new MyThread());
        t1.start(); 
    }
}

class MyThread implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+":繼承Runnable介面");
    }   
}

程式輸出:Thread-0:繼承Runnable介面

3.通過Callable和FutureTask建立執行緒

Callable位於java.util.concurrent包下,它也是一個介面,在它裡面也只聲明瞭一個方法,只不過這個方法叫做call();

一般情況下是配合ExecutorService來使用的,在ExecutorService介面中聲明瞭若干個submit方法的過載版本。