JAVA多執行緒機制第二彈:(程式碼)Thread的子類建立執行緒
阿新 • • 發佈:2018-12-19
在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()方法,記住呀!