Thread programming in Java is very EEEEEASY !
範例參考: 
 http://www.csie.nctu.edu.tw/~tsaiwn/oop/java/03_sample_JavaPrograms/
   子目錄: 20_tea/  和   21_network/

Java 的 Thread 有兩種寫法:
  (1) 若你的 class 沒有 extends 別的 class 建議用這招:
     class any_name extends Thread {
         //... constructor(s) if you want
        public void run( ) {
          //...
        }
        //...
     }// class
   使用該 Thread:
     any_name gg = new any_name( );
     gg.start( );   // concurrent running

  (2) 若你的 class 已經 extends 別的 class, 則只能這樣:
     class any_name implements Runnable {
         //... constructor(s) if you want
        public void run( ) {
          //...
        }
        //...
     }// class

    使用該 Thread:
     any_name yy = new any_name( );   // 生出 Runnable 物件 
     Thread gg = new Thread(yy);   // 把它包成 Thread 物件 
     gg.start( );   // concurrent running
 ==========================================
*** 等待某 Thread gg 完成: (會合)  gg.join( );
    注意 join( ) 可能會丟出 Exception,
    所以若沒有處理則 compile 就不會過! 
  用騙的就可:  try {  gg.join( );  } catch(Exception e) {;}

*** stop( ) 會有問題所以已經是 deprecated
   建議要改為在 thread class 內設一個變數, 主僕都要看得見,
   主僕: 若 gg 是 Thread 物件, 
       則執行 gg.start( ) 的那程式就是主 (當然也是一個 thread);
       因為 gg.start( ) 而跑起來的 thread 就是 僕 :-)
    要做出 stop( )的效果, 就是由"主"把該主僕都看得見的變數改為叫僕去死!
       "僕" thread 須三不五時就要看看該變數, 看是否"主"要它死,
        若是, 則應該 return 以便結束該 Thread.
*** 如何解決 Critical section的 mutual exclusive ?
   有兩種方法:
      (1) 在函數名稱左方寫 synchronized
          這樣使得整個 function 都在 critical section 內!
  注意, 同一個 class 內所有的 synchronized function 形成critical section 
      (2) 使用 synchronized(物件變數) { ... }   例如:
          String haha = "hehehe";
          synchronized(haha) {
             // critical section
          }   
  注意, 對同一個物件 synchronized 的 block (區塊) 算在同一critical section 
    
*** suspend( ) 和 resume( ) 也是 deprecated, 須用別的方法做:
     可以仿照上述 stop( ), 在 thread class 內有個主僕共用變數,
      另外再隨便弄個主僕都看得見的物件變數, 例如 String haha="hehehe";
     "主" 希望 "僕" 暫停就把該變數設成某特定值,
         "僕" 發現 主人要其 suspend 阿就執行  haha.wait( );
     "主" 希望該僕 resume( ) 就做:
          (a) 改該主僕共用變數為正常值, (b) haha.notify( );
   ** 注意 wait( ) 可能會丟出 Exception, 所以若沒有處理則 compile 就不會過! 
   ** 再注意 wait( ) 與 notify( ) 是針對某物件變數 (例如此例的 haha )
   ** 再再注意:  wait( ) 和 notify( ) 都必須在 synchronized Block 內,
       且 synchronized( ) 括號內的物件變數必須與 wait( ), notify( ) 用的同!
      否則雖 compile 會過, 執行時會當掉!   例如要像這樣:
         synchronized(haha) {
            //..
            haha.notify( );
         }