全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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线程管理之ActivityThread  # Android应用实现安装后自启动的方法  # android开机自启动APP及使用adb命令测试方法  # Android 代码设置开机自启动App的方法  # android引导用户开启自启动权限的方法  # Android的权限设置及自启动设置方法  # Android实战APP启动速度优化  # Android程序静默安装安装后重新启动APP的方法  # 详解Android中的ActivityThread和APP启动过程  # 死锁  # 走在  # 就会  # 是在  # 来了  # 如有  # 则是  # 没有任何  # 不可以  # 希望能  # 并非如此  # 谢谢大家  # 为了避免  # 上讲  # 单线程  # 疑问请  # 但是在  # 又来了  # private 


相关文章: javascript中的try catch异常捕获机制用法分析  已有域名如何快速搭建专属网站?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何高效配置IIS服务器搭建网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何选择适合PHP云建站的开源框架?  表情包在线制作网站免费,表情包怎么弄?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  html制作网站的步骤有哪些,iapp如何添加网页?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  做企业网站制作流程,企业网站制作基本流程有哪些?  实例解析angularjs的filter过滤器  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何高效生成建站之星成品网站源码?  制作网站公司那家好,网络公司是做什么的?  实例解析Array和String方法  如何用免费手机建站系统零基础打造专业网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  c# 服务器GC和工作站GC的区别和设置  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  中山网站推广排名,中山信息港登录入口?  广平建站公司哪家专业可靠?如何选择?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  建站之星安装步骤有哪些常见问题?  高端建站三要素:定制模板、企业官网与响应式设计优化  建站主机功能解析:服务器选择与快速搭建指南  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何快速上传自定义模板至建站之星?  如何通过虚拟主机快速搭建个人网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在腾讯云服务器上快速搭建个人网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  建站VPS推荐:2025年高性能服务器配置指南  如何解决ASP生成WAP建站中文乱码问题?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  网站制作公司排行榜,抖音怎样做个人官方网站  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  建站之星备案流程有哪些注意事项?  如何选择建站程序?包含哪些必备功能与类型?  建站主机无法访问?如何排查域名与服务器问题  如何用狗爹虚拟主机快速搭建网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  IOS倒计时设置UIButton标题title的抖动问题 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。