回覆列表
  • 1 # 首席分享官100

    //解決方案-1 設定3把鎖, 然後把鎖們應用到所有執行緒中 (涉及到synchronized wait notify等, 嫌麻煩. 略)

    解決方案-2 設定3個全域性共享的訊號標記(訊號燈) + 3子執行緒分別佔用標記1 2 3

    + 主執行緒輪詢/等待

    (簡潔明快 推薦)

    //解決方案-2 實現如下:

    static boolean t1_done = false;

    static boolean t2_done = false;

    static boolean t3_done = false;

    //t1------run() { ............ ; t1_done = true; }

    //t2、 3: 同理,略

    main () { .............;

    啟動t1;

    啟動t2;

    啟動t3;

    //輪詢 or 等待

    while ( true )

    if ( t1_done && t2_done && t3_done) break;

    else

    Thread.yield

    () ;

    // 或 Thread.sleep(xxxx) ----若子執行緒執行超過100ms以上,應予考慮

    //輪詢結束,主執行緒繼續工作

    } //main END

    have fun

  • 2 # 使用者50623762565

    package com.cg.test;

    /**

    * 設計4個執行緒,其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減少1。

    * 寫出程式。

    * 下程式使用內部類實現執行緒,對j增減的時候沒有考慮順序問題。

    * @author ai_zxc

    *

    */

    public class ThreadTest1{

    private int j;

    public static void main(String args[]){

    ThreadTest1 tt=new ThreadTest1();

    Inc inc=tt.new Inc();

    Dec dec=tt.new Dec();

    for(int i=0;i<2;i++){

    Thread t=new Thread(inc); //建立執行緒例項 將實現了Runnable介面的類 作為構造方法的引數

    t.start(); //啟動執行緒

    t=new Thread(dec);

    t.start();

    }

    }

    /**

    *加一 ,對此方法加鎖 synchronized 對方法加鎖 相當於對 方法操作的當前的資源加鎖

    */

    private synchronized void inc(){

    j++;

    System.out.println(Thread.currentThread().getName()+"-inc:"+j);

    }

    /**

    * 減一 對此方法加鎖 synchronized 對方法加鎖 相當於對 方法操作的當前的資源加鎖

    */

    private synchronized void dec(){

    j--;

    System.out.println(Thread.currentThread().getName()+"-dec:"+j);

    }

    /**

    * 內部類 實現Runnable介面

    * @author ai_zxc

    *

    */

    class Inc implements Runnable{

    public void run(){

    for(int i=0;i<100;i++){

    inc();

    }

    }

    }

    /**

    * 內部類 實現Runnable介面

    * @author ai_zxc

    *

    */

    class Dec implements Runnable{

    public void run(){

    for(int i=0;i<100;i++){

    dec();

    }

    }

  • 中秋節和大豐收的關聯?
  • 1500左右買個什麼樣的手機好?