国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 多線程實現重復啟動與停止的服務

2019-12-12 02:14:49
字體:
來源:轉載
供稿:網友

Android 多線程實現重復啟動與停止的服務

多線程環境下為了避免死鎖,一般提倡開放調用,開放調用可以避免死鎖,它的代價是失去原子性。但是在有些時候會顯得邏輯錯誤,

例如:

class A{   private boolean mIsStarted;  void start(){    boolean changed = false;    synchronized(this){   if(!mIsStarted){     mIsStarted = true;     changed = false;    }    if(changed){     callBack.onStart();    }   }  }  boolean isStarted(){  sychronized(this){   return mIstarted;  } }  void stop(){    boolean changed = false;    synchronized(this){     if(mStarted){     mStarted = false;    changed = true;    }   }    if(changed){   callBack.onStop();    }   }  } 

   在單線程環境下這個代碼沒有任何問題。可是在多線程環境就會出現奇怪的現象。

  原則上講, onStart 一定要走在onStop前面,可事實并非如此:

  執行步驟如下: 

   線程1 start

   線程2 stop

   線程1

 if(!mIsStarted){ mIsStarted = true;  changed = false; } 

   線程2  

synchronized(this){  if(mStarted){    mStarted = false;   changed = true;   }  }  

   線程2 onStop 

   線程1 onStart 

現在onStop 走在了onStart前面。那么問題來了,如何才能保證onStart 一定在onStop前面呢? 

那么問題又來了,stop 方法為什么不允許在start之前調用呢?如果一個類不可restart,那么stop是可以在start之前的,否則是不可以在start之前的。

以上就是Android 多線程實現重復啟動與停止的服務的講解,如有疑問請留言或者到本站社區交流討論,感謝 閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石阡县| 寻乌县| 巧家县| 宝坻区| 镇沅| 舒兰市| 新密市| 河西区| 平和县| 铜川市| 镇原县| 通许县| 文山县| 阿坝| 多伦县| 石狮市| 塔河县| 古丈县| 分宜县| 明溪县| 新和县| 济源市| 翁牛特旗| 新巴尔虎右旗| 江源县| 孟州市| 镇宁| 离岛区| 惠安县| 吉林市| 乌审旗| 兰溪市| 通化县| 哈巴河县| 开原市| 洛浦县| 林州市| 商南县| 黄浦区| 惠来县| 彰化县|