1. 程式人生 > >java學習筆記(12)--多執行緒程式設計

java學習筆記(12)--多執行緒程式設計

一、題目

1. 何為執行緒和多執行緒?如何建立多執行緒?

所謂執行緒,是指程序中一組程式與相應的操作的控制說明資訊的集合。多執行緒就是指多個執行緒的併發執行。在Java中建立多執行緒可以建立自己的類繼承自類Threads。
執行緒是一個程式內部的順序控制流。多執行緒是指在同一應用程式中有多個順序控制流 “同時” 執行。

2. 執行緒的生命週期由哪幾種狀態?各狀態之間分別用哪些方法切換?

執行緒在其生命期內有就緒、執行、阻塞、終止狀態。
由下圖我們可以得出執行緒有就緒、可執行、不可執行和終止四中基本狀態。其中。就緒狀態通過start()函式轉換成可執行狀態,可執行狀態通過方法run()令方法終止;或者通過sleep()、wait()變成不可執行狀態。同時不可執行狀態也可通過阻塞解除或者睡眠時間到達被喚醒從而轉化回可執行狀態。
這裡寫圖片描述

3. Java程式實現多執行緒有哪些途徑?

建立一個自己的執行緒類紀承自Threads類。
Java中建立執行緒有兩種方法:其中一類是繼承Thread類;再者就是通過定義實現Runnable介面。

4. 編寫兩個執行緒:

第一個執行緒計算2-1000000之間的質數及個數
第二個執行緒計算1000000-2000000之間的質數及個數

package xiti12;
import java.io.*;
import java.math.*;

class num{//數類
int number;
num(int num){
    number = num;
}
boolean isPrime(int x) {//判斷數是否為質數
    if(x==1) {
        return false;
    }
    else if(x==2) {
        return true;
    }
    else {
        for(int i=2;i<Math.sqrt(x);i++) {
            if(x%i==0) {
                return false;
            }
        }
    }
    return true;
}
}
class myThread extends Thread{//執行緒類
    private String threadName;
    int min;
    int max;
    int count = 0;
    myThread(String str,int a,int b){
        threadName = str;
        min = a;
        max = b;
    }
    public void run() {
        try {
            for(int i=min;i<=max;i++) {
                num i1 = new num(i);
                i1.number=i;
                if(i1.isPrime(i)) {
                    count++;
                }
            }
            System.out.println(threadName+"區域內質數個數為:"+count);
        }
        catch(Exception e){
            System.out.println("出現異常");
        }
    }
}
public class xiti12_4_Thread1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        myThread th1 = new myThread("Thread1",2,1000000);
        myThread th2 = new myThread("Thread2",1000000,2000000);
        th1.run();
        th2.run();
    }
}

這裡寫圖片描述