Android 多线程实现重复启动与停止的服务

Android 多线程实现重复启动与停止的服务,第1张

概述Android多线程实现重复启动与停止的服务多线程环境下为了避免死锁,一般提倡开放调用,开放调用可以避免死锁,它的代价是失去原子性。但是在有些时候会显得逻辑错误,

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 多线程实现重复启动与停止的服务的讲解,如有疑问请留言或者到本站社区交流讨论,感谢 阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android 多线程实现重复启动与停止的服务全部内容,希望文章能够帮你解决Android 多线程实现重复启动与停止的服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1144806.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存