Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android多線程研究(5)線程之間共享數據

Android多線程研究(5)線程之間共享數據

編輯:Android開發教程

一、如果是每個線程都執行相同的代碼,則可以使用同一個Runnable來實現共享

public class MultiThreadShareData {  
    public static void main(String[] args) {  
        new Thread(new ShareData()).start();  
        new Thread(new ShareData()).start();  
    }  
          
    static class ShareData implements Runnable{  
        private int j = 100;  
        @Override
        public synchronized void run() {  
            j--;  
        }  
    }  
}

上面代碼中兩個線程共享數據實現對j變量的遞減操作,至於上面代碼中為什麼要使用一個靜態內部類,該類static的作用是不依賴外部類的實例創建對象。

二、如果每個線程執行的代碼不同,則需要使用不同的Runnable對象來實現共享

public class MultiThreadShareData {  
    public static void main(String[] args) {  
        final ShareData data1 = new ShareData();  
        //啟動第一個線程  
        new Thread(new Runnable() {  
                  
            @Override
            public void run() {  
                data1.increment(); //加  
            }  
        }).start();  
        //啟動第二個線程  
        new Thread(new Runnable() {  
                  
            @Override
            public void run() {  
                data1.decrement();  //減  
            }  
        }).start();  
    }  
          
    static class ShareData{  
        private int j = 0;  
        public synchronized void increment(){  
            j++;  
        }  
              
        public synchronized void decrement(){  
            j--;  
        }  
    }  
}

將上面代碼進修改(將數據作為外部類的成員變量,讓Runnable接口操作該成員變量)如下:

public class MultiThreadShareData {  
    public static void main(String[] args) {  
        ShareData data1 = new ShareData();  
        new Thread(new MyRunnable1(data1)).start();  
        new Thread(new MyRunnable2(data1)).start();  
    }  
          
    static class MyRunnable1 implements Runnable{  
        private ShareData data1;  
        public MyRunnable1(ShareData data1){  
            this.data1 = data1;  
        }  
        @Override
        public void run() {  
            data1.increment();  
        }  
              
    }  
          
    static class MyRunnable2 implements Runnable{  
              
        private ShareData data1;  
      
        public MyRunnable2(ShareData data2){  
            this.data1 = data1;  
        }  
      
        @Override
        public void run() {  
            data1.decrement();  
        }  
              
    }  
          
    static class ShareData{  
        private int j = 0;  
        public synchronized void increment(){  
            j++;  
        }  
              
        public synchronized void decrement(){  
            j--;  
        }  
    }  
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved