Java多個線程之間處理共用資料的方式,java線程

來源:互聯網
上載者:User

Java多個線程之間處理共用資料的方式,java線程
題目要求:


有4個線程,其中兩個線程每次對x加1,另外兩個每次對x減1,如何??

分析:
    x就是這4個線程要處理的共用資料,不同種線程有不同的處理方式,但操作的資料是共同的,聯想到“視窗買票問題”,但是賣票只是單純的減。

所以,多個線程訪問共用對象或資料的方式,先看,如果每個線程執行的代碼相同,那麼就可以使用同一個Runnable對象,這個對象中有被共用的資料,如買票問題。

如果每個線程執行的代碼不同,肯定需要不用的Runnable對象,有兩種方式實現這些不同的Runnable對象之間的資料共用:

第一種:將共用資料封裝到一個對象中,把這個共用資料所在的對象傳遞給不同的Runnable,每個線程對共用資料的操作也分給那個

對象完成,這樣就可以實現對該資料處理的互斥與通訊。

class ShareData {private int x = 0;public synchronized void addx(){x++;System.out.println("x++ : "+x);}public synchronized void subx(){x--;System.out.println("x-- : "+x);}}class MyRunnable1 implements Runnable{private ShareData share1 = null;public MyRunnable1(ShareData share1) {this.share1 = share1;}public void run() {for(int i = 0;i<100;i++){share1.addx();}}}class MyRunnable2 implements Runnable{private ShareData share2 = null;public MyRunnable2(ShareData share2) {this.share2 = share2;}public void run() {for(int i = 0;i<100;i++){share2.subx();}}}public class ThreadsVisitData {  public static void main(String[] args) {ShareData share = new ShareData();new Thread(new MyRunnable1(share)).start();new Thread(new MyRunnable2(share)).start();}}


第二種:

將這些Runnable對象作為某一個類的內部類,共用的資料作為外部類的成員變數,對共用資料的操作分配給外部類的方法來完成,以此實現對操作共用
資料的互斥和通訊,作為內部類的Runnable來操作外部類的方法,實現對資料的操作


class ShareData {private int x = 0;public synchronized void addx(){x++;System.out.println("x++ : "+x);}public synchronized void subx(){x--;System.out.println("x-- : "+x);}}public class ThreadsVisitData { public static ShareData share = new ShareData(); public static void main(String[] args) {//final ShareData share = new ShareData();new Thread(new Runnable() {public void run() {for(int i = 0;i<100;i++){share.addx();}}}).start();new Thread(new Runnable() {public void run() {for(int i = 0;i<100;i++){share.subx();}}}).start(); }}

總結:要同步互斥的代碼任務最好將他們分別放在獨立的方法中,這些方法再放在同一個類中,這樣比較容易實現操作的同步和通訊


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.