1. 程式人生 > >JAVA多執行緒機制第二彈:(程式碼)Thread的子類建立執行緒

JAVA多執行緒機制第二彈:(程式碼)Thread的子類建立執行緒

在Java中,執行緒物件的建立是用Threa類或者它的子類建立。

在編寫Thread類的子類時,需要重寫父類的run()方法,其目的是規定執行緒的具體操作,否則執行緒就沒有開始的地方

在這裡,做一個小小總結:

 ··線上程的編寫的時候,要重寫父類的run()方法,在run()裡寫執行緒相關功能;

 ··線上程的呼叫的時候,執行緒必須要呼叫start()方法(從父類繼承的方法)通知JVM,這樣JVM就會知道又有一個新一個執行緒排隊等候切換了

在這裡,我們為了體現多執行緒交替使用CPU資源的,舉螞蟻吃蛋糕的例子,即每個小螞蟻是一個執行緒,蛋糕是資源(即CPU),好了,

我們開始吧!

第一步:建立一個主類,一開始只有

 public static void main(String[] args){
}

最後在新增方法和呼叫,最後執行前是這樣的

package com.suzhou.dajiang;

public class main {
    public static void main(String[] args) {
        Cake cake = new Cake();
        int size = 10;
        cake.setSize(size);
        System.out.println("蛋糕一個有"+size+"份");
        Ant antRed = new Ant("紅螞蟻",cake);
        Ant antblack = new Ant("黑螞蟻",cake);
        antRed.start();
        antblack.start();

    }
}

第二步:做一個蛋糕

package com.suzhou.dajiang;

public class Cake {
    int size;


    public void setSize(int n){
        size = n;
    }

    public int getSize(){
        return size;
    }

    public void lost(int m){//蛋糕剩餘
        if(size-m > 0){
            size = size -m;
        }

    }
}

 第三步:請最少兩個螞蟻過來(及最少兩個執行緒,能體現執行緒輪流使用的效果)

package com.suzhou.dajiang;

public class Ant extends Thread{

    Cake cake;
    public Ant(String name, Cake cake){
        this.cake = cake;
        setName(name);
    }


    @Override
    public void run() {//run方法,讓執行緒跑起來
        while (true){//死迴圈,讓執行緒不停跑
            int n=2;//每次螞蟻吃的蛋糕數量
            System.out.println(getName()+"吃"+n+"份蛋糕");//列印誰吃了蛋糕
            cake.lost(n);//開始吃
            System.out.println(getName()+"發現蛋糕還剩"+cake.getSize()+"份蛋糕");//剩餘蛋糕數
            cake.getSize();
            try {//sleep()方法,讓執行緒每迴圈一次休息一秒;然而錯誤提示,直接alt+ctrl+t丟擲異常,就好嘍
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (cake.getSize()<=2){
                System.out.println("結束了");
                return;//結束,跳出迴圈
            }
        }
    }
}

編寫執行緒子物件的第一步哈,就是重寫run()方法,記住呀!

結果: