新建一个线程去运行下载数据或数据查询的操作
来源:互联网 发布:oracle的sql developer 编辑:程序博客网 时间:2024/05/16 05:34
1。 新建一个SingleThreadExecutor,用这种而不是用线程池的好处,就是不用管引用变量的线程,不用上锁,避免循环死锁
config.executorService = Executors.newSingleThreadExecutor();
2。 新建一个Runnable对象,执行execute方法,将runnable的内容引入这个线程中去执行
instance.singleExecutorService.execute(new Runnable() { @Override public void run() { Bifrost.globalApplication.unregisterActivityLifecycleCallbacks(mActivityLifecycleCallbacks); BFRuleMgr.getInstance().clearEnableRules(); if((BFNetworkMonitor.networkChangeReceiver != null) && (Bifrost.globalApplication != null)){ BFNetworkMonitor.unRegisterNetworkReceiver(Bifrost.globalApplication); } } });
3。这个线程异于主线程,因此不会阻塞主线程的操作,但是也有缺点,主要表现在在非主线程中不能直接使用handler,和toast等跟UI有关的操作,如果要使用handler,必须先调用Looper.prepare(),和Looper.loop()方法,因为一个handler发送消息队列需要有一个已经定义好的looper,主线程已经定义好,因此可以不用。另外,同一个数据如arraylist等不能同时在两个线程中引用和修改,否则会出现线程间修改数据的冲突。解决办法有两种
(1)在主线程中,将耗时的操作抛入异步线程中,具体方法如上;
(2)在一部线程中,将代码抛入主线程中
获得一个主线程的handler
private static Handler mainHandler = new Handler(Looper.getMainLooper());
private void startRuleInMainLooper(final BFRule ruleObserver) { if (Looper.myLooper() == Looper.getMainLooper()) { ruleObserver.startRule(); //含有conditionName的rule,重新start } else { Bifrost.getMainHandler().post(new Runnable() { @Override public void run() { ruleObserver.startRule(); } }); } }
如下定时器
Handler timeHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_TIME: BFRuleMgr.getInstance().updateCurrentRules(BFConstant.CONDITION_TIME); break; } super.handleMessage(msg); } };
*需要注意的是:
在异步线程中执行代码的时候,不能嵌套多层抛入,因为这样可能引起代码运行时序错乱,导致逻辑错误。*
0 0
- 新建一个线程去运行下载数据或数据查询的操作
- 数据的去重查询
- 新建接收数据线程
- onethink如何在新增时一条数据的时候运行一个函数或进行某数据库的操作
- android 开启线程查询数据,耗时操作
- 数据的查询、模糊查询、新建、修改、删除
- C# 新建一个线程,运行其它的内容
- 数据去零操作
- 使用对象去暂停或锁住一个线程的方式
- 从数据库查询的数据作为参数去查另外一个数据库
- mysql查询一天,查询一周,查询一个月的数据(mysql操作日期)
- Hibernate 查询用【in】条件去查询数据库的数据
- Navicat 连接MySQL数据不能新建查询,提示文件名、目录名或卷标语法不正确
- sql server查询一类中或一个子类中的最新的一条数据
- Access数据操作报错:操作必须使用一个可用的更新查询
- 如何新建一个DataSet,并且插入相应的数据
- Android 数据保存到新建的一个excel表
- ORACLE 数据去重查询的几种常见方式
- Android AutoLayout全新的适配方式 堪称适配终结者
- 【LeedCode】328. Odd Even Linked List
- iOS设备、Icon、LaunchImage、图片分辨率
- windows server 部署负载均衡
- DataTable序列化和反序列化
- 新建一个线程去运行下载数据或数据查询的操作
- NSArry基本用法
- Linux个性化命令行登陆提示文字
- 安装windows2008系统的心得
- Android 屏幕适配方案
- JAVA之 jdk 的配置
- 客户端和服务器端交互之session
- 我的网页搭建中篇01——网页背景02.使用渐变色做网页背景
- 已知先序中序序列求后序序列