JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區 » 語法(Syntax)  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 Re:剛學java新手想問關於多執行緒 [Re:610]
kentyeh





發文: 644
積分: 6
於 2018-08-01 01:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你的程式碼基本上是無法執行,我看到的一些問題如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class F1Car1 extends Thread{
  static int total;  //我想知道為什麼這裡宣告為static?,是所有F1Car1類別共用這個變數?
  //而且total顯然會被不同Thread所存取(例如game與自已),所以要考慮同步問題,不然幾乎會發生Race Condition
  public F1Car1(String s) {
    setName(s );  //理論上是不能過的,因為沒有相關variable與method的宣告,而也Constructor內呼叫Instance method 不是很好的方式
    out.println( "car1:"+getName());
  }
  public void run() {
    int t;
    while(total<2000) {
      t=(int)(Math.random()*300);//Math.random()永遠取值[0,1),所以t 永遠是 0
      out.println(getName()+":"+t);
      total+=t;
    }
  }
}
class F1Car2 extends Thread{ //顯然與 TCar1一模一樣,沒必要多宣告一個
  
  
  static int total;
  public F1Car2(String s) {
    setName(s );
    out.println( "car1:"+getName());
  }
  public void run() {
    int t;
    while(total<2000) {
      t=(int)(Math.random()*300);
      out.println(getName()+":"+t);
      total+=t;
    }
  }
}
class Game extends Thread{//這個顯別顯然沒有必要宣告為Thread,因為通常在主方法(main(...))呼叫rank()前就執行結束
  private F1Car1 car1;
  private F1Car2 car2;
  private int rank=0;
  public void rank() { //同上面說法,在rank()執行前,Car1 與 Car2 早已跑完
    if(car1.total>=2000) {
      rank++;
      out.println(getName()+":"+"rank"+rank);
    }
    if(car2.total>=2000) {
      rank++;
      out.println(getName()+":"+"rank"+rank);
    }
  }
  public void run() {
    while(rank<2) {
    car1.start();
    car2.start();
  }
  }
  
}
public class practicemulti2 {
  
  public static void main(String[] args) {
    F1Car1 c1=new F1Car1("c1");
    F1Car1 c2=new F1Car1("c2");
    game g=new game();
    g.start();
    g.rank();
  }
 
}

我無法從你的程式看出你的意圖,最好是把你的題目拋上來看看。
另外程式碼請夾在[ code ]裡面,不然很看的意願不高


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
364 剛學java新手想問關於多執行緒 610 1468 2018-07-31 10:31
278 Re:剛學java新手想問關於多執行緒 kentyeh 1710 2018-08-01 01:32
» JWorld@TW »  Java 新手區 » 語法(Syntax)

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8