Java 多線性讀者寫者問題

來源:互聯網
上載者:User

 

package namespace;class Man {String name;String sex;boolean flag=false;//  定義一個開關變數,用來進行讀或寫的操作}class Input implements Runnable{private Man man;private static  int num=1;//用於控制兩次寫進去的值不一樣 public Input(Man m){this.man=m;}public void run(){while(true){   synchronized(man) {   if(man.flag)//如果flag=true的話,就代表已經寫進去值了,所以就要等待   try { man.wait();}catch(Exception e) {}      if(num==1)//等待被喚醒之後,下面就要對其進行寫的操作了   {man.name="mike";man.sex="男";   }else {    man.name="Lily";man.sex="女";   }   //上面是已經執行完寫的動作   man.flag=true;//寫完之後,要把flag設定成true ,這代表已經寫完,等被讀,如果再執行寫操作的話,上面flag=true ,就開始了等待了   num=(num+1)%2;   man.notify();//   }}}}class Output implements Runnable{private Man man;public Output(Man m){this.man=m;}public void run(){while(true){synchronized(man){if(!man.flag)   try { man.wait();}catch(Exception e) {} System.out.println(man.name+"...."+man.sex);man.flag=false;man.notify();}}}}public class Study{public static void main(String args[]){Man man=new Man();Thread t1=new Thread(new Input(man));Thread t2=new Thread(new Output(man));t1.start();t2.start();}}/* * 多線程讀者寫者問題 * 線程之間的通訊一般都是一段共用資料的操作來進行通訊的 * *裡面的兩個線程就是一個讀一個寫,然而這兩個操作是通過兩個線程同時進行的.因此如果線程不同步,將會出現安全性問題 *所謂的安全性問題就是線和寫和線和讀的結果不一樣,出就是讀出來的值並不是寫進行的那樣,這樣就出來了安全性問題 *問題的解決: *出現這種同時操作一個對象的問題,就是把它們操作那個對象的代碼進行同步 *讀者與寫者的問題要考慮到兩個方面: *1. 讀和寫的兩個線程要同步 *2. 讀和寫要寫進去一個就讀一個 * *  *  * */ /*2011/10/23  21:22:20  * */

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.