android-Android线程间同步问题,实现主线程死等新线程处理结束

问题描述

Android线程间同步问题,实现主线程死等新线程处理结束

我的主线程是activity,在主线程里开启了线程R1,希望R1的任务处理完成后通知主线程继续,否则主线程一直等待,怎么实现?

解决方案

首先你这样的需求是违背android官方设计的,你应该考虑一下要实现你的功能,换一种需求(实现方式)是否可以。
主线程负责呈现画面增强交互,不应该阻塞,非要实现这样的功能,
可以在主线程是activity开启线程R1,然后什么事儿也不做,当R1的任务处理完成后通知主线程继续后再做事儿(绘制画面,注册事件等等)

解决方案二:

线程间同步实现--通过互斥锁和条件变量

解决方案三:

你这里说的主线程,实际上就是UI线程,这个线程是不能阻塞的,否则会ANR。
正确的做法是,当你起个线程R1时,UI线程显示个进度条,然后等R1处理完,UI线程取消进度条。
推荐使用AsyncTask。要注意,对于界面的操作,都要在UI线程处理,不要在其他线程里处理。

时间: 2024-11-02 12:55:09

android-Android线程间同步问题,实现主线程死等新线程处理结束的相关文章

多线程同步-主线程等待所有子线程完成案例

http://blog.csdn.net/qiujuer/article/details/34862469 有时候我们会遇到这样的问题:做一个大的事情可以被分解为做一系列相似的小的事情,而小的事情无非就是参数上有可能不相同而已! 此时,如果不使用线程,我们势必会浪费非常多的时间来完成整个大的事情,而使用线程的话将会存在这样的问题: 主线程启动所有子线程并发执行后主线程就直接返回了,导致外部函数判读整个大的事情完成了,但是实际上并没有完成! 针对以上情况我想我会采用多线程方式执行同时解决主线程等待

windows主线程如何等待子线程结束

问题描述 windows主线程如何等待子线程结束 我在主线程中起了多个子线程,想等所有子线程结束主线程再继续做后面的事情. 但是我自起子线程的函数下面用WaitForMultipleObjects等待所有子线程结束,会阻塞主线程导致程序无反应死掉. 请各位大侠帮忙看下应该如何处理? 解决方案 WaitForMultipleObjects 确实会阻塞主线程的,不想阻塞主线程就只能自己实现,使用事件或者其它类似的机制. 系统没有现成的,只能自己使用线程间通讯的机制来实现. 解决方案二: MsgWai

当主线程崩溃而其它线程继续运行时发生什么

孤线程模式 症状 治疗和预防措施 总结 参考资料 关于作者 对本文的评价 当主线程崩溃而其它线程继续运行时发生什么? Eric E. Allen(eallen@cs.rice.edu) 博士研究生候选人,Rice 大学 2001 年 8 月 在多线程代码中,使用驱动其它线程所负责的动作的单个主线程是常见的.这个主线程发送消息,通常是通过把它们放到一个队列中,然后其它线程处理这些消息.但是如果主线程抛出一个异常,那么剩余的线程会继续运行,等待更多输入到该队列,导致程序冻结.在诊断 Java 代码的

多线程-linux下,子线程如何通过pthread_kill向主线程发送信号?

问题描述 linux下,子线程如何通过pthread_kill向主线程发送信号? //如下代码 #include <stdio.h> #include <signal.h> #include <pthread.h> void signal_deal(int sig); void* fun(); pthread_t pt_main; int main(int argc, char* argv[]) { pthread_t pt; //pt_main = getpid();

socket-C#主线程如何访问子线程 局域网通讯

问题描述 C#主线程如何访问子线程 局域网通讯 我创建了一个子线程用来进行socket连接 我发送消息用文本框 下面问题来了 文本框的知如何传给子线程的socket发送部分啊 或是我这种写法就不对在创建别的线程啊 解决方案 按Win32思路1.全局数据区 int m_datalen=0; TCHAR m_datalen[MAX_PATH]; HANDLE m_hMutex; HANDLE m_hEvent[2];2.建立全局数据共享锁 m_hMutex = CreateMutex(NULL FA

linux 把主线程cancel 掉后,由主线程创建的子线程会不会被cancel掉?

问题描述 linux 把主线程cancel 掉后,由主线程创建的子线程会不会被cancel掉? linux 把主线程cancel 掉后,由主线程创建的子线程会不会被cancel掉? 解决方案 不会.进程是独立的,不是线程.

Java多线程--让主线程等待所有子线程执行完毕在执行_java

朋友让我帮忙写个程序从文本文档中导入数据到oracle数据库中,技术上没有什么难度,文档的格式都是固定的只要对应数据库中的字段解析就行了,关键在于性能. 数据量很大百万条记录,因此考虑到要用多线程并发执行,在写的过程中又遇到问题,我想统计所有子进程执行完毕总共的耗时,在第一个子进程创建前记录当前时间用System.currentTimeMillis()在最后一个子进程结束后记录当前时间,两次一减得到的时间差即为总共的用时,代码如下  long tStart = System.currentTim

C#子线程执行完后通知主线程的方法_C#教程

其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿. 那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就很简单了委托传值嘛: 下面有一个例子,子线程干一件事情,做完了通知主线程 public class Program { //定义一个为委托 public delegate void Entrust(string str); static void Main(string[] args) { Entr

Java多线程--让主线程等待所有子线程执行完毕代码

采用CountDownLatch类来实现     主线程    package test; import java.util.concurrent.CountDownLatch; public class Main {  /**   *   * @author Administrator/2012-3-1/上午09:36:55   */  public static void main(String[] args) {   int threadNum = 10;   CountDownLatch