JAVA入門到精通-第39講-執行緒.坦克大戰7
阿新 • • 發佈:2018-11-30
如果沒有做要求,用實現介面的方法寫程序;
至少有繼承的機會;
實際上,更多的情況下是多執行緒計算;
兩個執行緒,t1/t2,同時啟動;
建立了一隻豬,建立了一隻鳥;
第一個執行緒承載豬,第二個執行緒承載鳥;
很可能是交替進行,但也未必;和休眠時間相關;
同時去爭奪一種資源,執行緒同步的問題;
Thread類本身就實現了Runnable介面,本身是一家人;
啟動的方式不太一樣;
坦克的子彈自動跑(肯定用到執行緒):
子彈也是一個物件:有座標,有速度;
可以當做執行緒的一個類,可以自動跑動;
子彈也是屬於某個坦克的;
這個坦克永遠只能有一顆子彈;
當用戶按下J的時候,子彈發射:KeyPressed else if 的致命毛病是找到一個入口, 不會去判斷另外的入口; 按了W鍵,子彈就可能出不來了;
繪製子彈:
其實是一個點:
怎麼讓子彈跑起來?
讓子彈的座標不停的得到修改。
把子彈做成一個執行緒,不停地修改座標達到目的;
傳方向進去:
傳進速度:
//子彈何時死亡?
啟動子彈: 雖然子彈座標在變化,但子彈不變; paint函式需要不停地重繪,子彈才能跑; 把MyPanel也做成一個執行緒; 螢幕本身也在不停的重新整理: 還得啟動MyPanel執行緒 但是,打一顆子彈,這子彈永遠在跑: 當子彈碰到敵人坦克/邊框的時候子彈死亡; boolean isLive=true; ----------------------------------------------------------
多執行緒例項演示[Thread03.java] x 1
來自為知筆記(Wiz)
當用戶按下J的時候,子彈發射:KeyPressed else if 的致命毛病是找到一個入口, 不會去判斷另外的入口; 按了W鍵,子彈就可能出不來了;
啟動子彈: 雖然子彈座標在變化,但子彈不變; paint函式需要不停地重繪,子彈才能跑; 把MyPanel也做成一個執行緒; 螢幕本身也在不停的重新整理: 還得啟動MyPanel執行緒 但是,打一顆子彈,這子彈永遠在跑: 當子彈碰到敵人坦克/邊框的時候子彈死亡; boolean isLive=true; ----------------------------------------------------------
多執行緒例項演示[Thread03.java] x 1
/**
2
*多執行緒Thread使用
3
*1、一個執行緒通過接收n來執行1+..+n得到和
4
*2、另一執行緒每隔1秒輸出一次hello world!
5
*/
6
public class Thread03 {
7
public static void main(String[] args) {
8
Pig pig=new Pig(10);
9
Bird bird=new Bird(10);
10
//建立執行緒
11
Thread t1=new Thread(pig);
12
Thread t2=new Thread(bird);
13
//啟動執行緒
14
t1.start();
15
t2.start();
16
}
17
}
18
19
//列印hello world!
20
class Pig implements Runnable{
21
int n=0;
22
int times=0;
23
public Pig(int n){
24
this.n=n;
25
}
26
27
public void run(){
28
while(true){
29
try {
30
Thread.sleep(1000);
31
} catch (Exception e) {
32
e.printStackTrace();
33
}
34
times++;
35
System.out.println("我是一個執行緒,正在輸出第"+times+"個hello world!");
36
if(times==n){
37
break;
38
}
39
}
40
}
41
}
42
43
//算數學題
44
class Bird implements Runnable{//多執行緒時應使用implements介面來實現,不要使用extends繼承
45
int n=0;
46
int res=0;
47
int times=0;
48
public Bird(int n){
49
this.n=n;
50
}
51
52
public void run() {
53
while(true){
54
try {
55
Thread.sleep(1000);
56
} catch (Exception e) {
57
e.printStackTrace();
58
}
59
res+=(++times);
60
System.out.println("當前結果是:"+res);
61
if(times==n){
62
System.out.println("最後的結果是:"+res);
63
break;
64
}
65
}
66
}
67
}
68
MyTank03:
來自為知筆記(Wiz)