Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android多線程研究(3)線程同步和互斥及死鎖

Android多線程研究(3)線程同步和互斥及死鎖

編輯:Android開發教程

為什麼會有線程同步的概念呢?為什麼要同步?什麼是線程同步?先看一段代碼:

package com.maso.test;  
      
public class ThreadTest2 implements Runnable{  
    private TestObj testObj = new TestObj();  
          
    public static void main(String[] args) {  
        ThreadTest2 tt = new ThreadTest2();  
        Thread t1 = new Thread(tt, "thread_1");  
        Thread t2 = new Thread(tt, "thread_2");  
        t1.start();  
        t2.start();  
    }  
      
    @Override
    public void run() {  
              
        for(int j = 0; j < 10; j++){  
            int i = fix(1);  
            try {  
                Thread.sleep(1);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
                  
            System.out.println(Thread.currentThread().getName() + " :  i = " + i);  
        }  
              
    }  
          
    public int fix(int y){  
        return testObj.fix(y);  
    }  
          
    public class TestObj{  
        int x = 10;  
              
        public int fix(int y){  
            return x = x - y;  
        }  
    }  
          
          
}

輸出結果後,就會發現變量x被兩個線程同時操作,這樣就很容易導致誤操作。如何才能解決這個問題呢?用線程的同步技術,加上synchronized關鍵字

public synchronized int fix(int y){

return testObj.fix(y);

}

加上同步後,就可以看到有序的從9輸出到-10.

如果加到TestObj類的fix方法上能不能實現同步呢?

public class TestObj{

int x = 10;

public synchronized int fix(int y){

return x = x - y;

}

}

如果將synchronized加到方法上則等價於

synchronized(this){

}

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