1、主线程来向子线程发送消息的方法

在平时写程序时,我们一般都是在子线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了。那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程发送消息,希望子线程来完成什么任务。如果这样子应该怎么做呢?这就是这篇文章将要讨论的内容。

一、HandlerThread类

主线程发送消息给子线程,通常思维逻辑就是:其实很简单,在主线程中实例化一个Handler,然后让他与子线程相关联(只要它与子线程的Looper相关联即可),这样子它处理的消息就是该子线程中的消息队列,而处理的逻辑都是在该子线程中执行的,不会占用主线程的时间。那么我们就来实现一下,看看这样子到底行得通还是行不通。新建项目,修改它的MainActivity的代码,如下即可:

链接:https://www.cnblogs.com/fuly550871915/p/4890066.html

2、主线程与子线程的区别

每个线程都有一个唯一标示符,来区分线程中的主次关系的说法。 
线程唯一标示符:Thread.CurrentThread.ManagedThreadID;

  • UI界面和Main函数均为主线程。
  • 被Thread包含的“方法体”或者“委托”均为子线程。
  • 委托可以包含多个方法体,利用this.Invoke去执行。
  • 也可以定义多种方法体,放在Thread里面去执行。则此方法体均为子线程。注意如果要修改UI界面的显示。则需要使用this.Invoke,否则会报异常。
  • Main函数为主线程,id标示符与UI界面主线程相等

    以下为测试代码:

  • https://blog.csdn.net/qq_23833037/article/details/51850264

  • 总结: 
    1. 什么是子线程? 
    包含在 Thread thread = new Thread(new ThreadStart(delegate{ 
    }));里面均视为子线程。(个人理解) 
    2. 什么是主线程? 
    UI界面和Main函数均为主线程,除了“不包含在Thread里面的程序”均可 视为主线程。(个人理解)

  • 线程通信的目的是为了能够让线程之间相互发送信号。另外,线程通信还能够使得线程等待其它线程的信号,比如,线程B可以等待线程A的信号,这个信号可以是线程A已经处理完成的信号。

    通过共享对象通信

    有一个简单的实现线程之间通信的方式,就是在共享对象的变量中设置信号值。比如线程A在一个同步块中设置一个成员变量hasDataToProcess值为true,而线程B同样在一个同步块中读取这个成员变量。下面例子演示了一个持有信号值的对象,并提供了设置信号值和获取信号值的同步方法:

    链接代码:https://blog.csdn.net/suifeng3051/article/details/51863010


主线程和子线程的区别,线程之间的通信相关推荐

  1. java主线程和子线程区别_主线程异常– Java

    java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...

  2. android主线程和子线程的区别

    android 主线程和子线程有什么区别 本文较为深入的分析了android中UI主线程与子线程.分享给大家供大家参考. 具体如下:在一个Android 程序开始运行的时候,会单独启动一个Proces ...

  3. android判断主线程_Android主线程和子线程区别详解

    主线程和子线程的区别 每个线程都有一个唯一标示符,来区分线程中的主次关系的说法. 线程唯一标示符:Thread.CurrentThread.ManagedThreadID; UI界面和Main函数均为 ...

  4. pthread_detach():主线程与子线程分离,子线程结束后,资源自动回收

    https://github.com/Rtoax/test/tree/master/c/glibc/pthread 目录 前言 pthread_join() pthread_detach() 前言 1 ...

  5. 主线程和子线程的关系(讨论主线程结束,子线程是否要回收)

    主线程和子线程,在操作系统里面其实是一样的,没有本质区别.至于主线程结束,子线程是否要回收,下面有两种比较特殊的情况. 第一种: 主线程退出了,子线程还可以执行. 主要是因为pthread_exit函 ...

  6. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  7. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

  8. python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式

    threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口 以后我们就用 threading 模块来管理线程就可以了. Tread 类:控制线程创建.启动及运行方式 一.线 ...

  9. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)

    Qt之主线程与子线程通信(linux下) 转载请注明出处:http://blog.csdn.net/feng1790291543 主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息 ...

最新文章

  1. matplotlib库之patch
  2. Java 8 vs. Scala之Lambda表达式
  3. 编程入门python语言是多大孩子学的-包头孩子学编程python好吗
  4. 使用JDBC连接SQL Server数据库
  5. 未能加载文件或程序集“System.Data.SQLite, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139...
  6. 软件包管理器 RPM 升级软件包过程分析
  7. java信号量源代码_Java信号量Semaphore原理及代码实例
  8. Java 操作 JSON
  9. 模糊层次分析法matlab,求三角模糊数层次分析法(FEAHP)模型计算的MATLAB程
  10. 13.3.4 蓝牙程序案例: 蓝牙串口调试助手
  11. 2018考研信工所二室
  12. 从零开始自制实现WebServer(一)---- 万丈高楼平地起 步子得一步一步慢慢走
  13. 大学实训_软件毕设_Java入门实战_商场管理系统_Punrain
  14. 好大一个家 陈佩斯
  15. 知道浏览器下载的地方藏在哪里嘛?——看完你就知道
  16. csgo账号连接服务器错误,steam csgo连接服务器发生错误 | 手游网游页游攻略大全...
  17. Oracle 'open cursor loop fetch into' and 'for in cursor loop'
  18. 30# 如何将virtualbox的虚拟机目录移动位置
  19. 老船履带工具使用方法_船舶通导设备的日常维护要点归纳
  20. 科学家制造迄今最低温度新纪录

热门文章

  1. Shell:设置文件权限
  2. java饭店里面有五道菜, 黄花鱼 200块, 烤鸭 100块, 红烧肉 60块, 小炒肉 40块, 白水豆腐 10块。一个客人进了饭店, 根据身上的钱来决定最好能吃哪道菜 , 编程模拟。
  3. php抛物线函数,js绘制抛物线代码分享
  4. 魅蓝metal android7,魅族魅蓝metal的手机系统是什么?能升级安卓5.0吗?
  5. 坚持写作快两年了,有些私藏工具跟你们分享
  6. apple全家桶每一样在中国最高配置分别多少钱
  7. Dex.top(大力士)关于上线BOSC的公告
  8. TortoiseSVN日常使用指南 此博文包含图片
  9. 汽车违章查询免费API
  10. 使用Selenium模拟浏览器登录,并获取页面信息