主线程和子线程的区别,线程之间的通信
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
主线程和子线程的区别,线程之间的通信相关推荐
- java主线程和子线程区别_主线程异常– Java
java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...
- android主线程和子线程的区别
android 主线程和子线程有什么区别 本文较为深入的分析了android中UI主线程与子线程.分享给大家供大家参考. 具体如下:在一个Android 程序开始运行的时候,会单独启动一个Proces ...
- android判断主线程_Android主线程和子线程区别详解
主线程和子线程的区别 每个线程都有一个唯一标示符,来区分线程中的主次关系的说法. 线程唯一标示符:Thread.CurrentThread.ManagedThreadID; UI界面和Main函数均为 ...
- pthread_detach():主线程与子线程分离,子线程结束后,资源自动回收
https://github.com/Rtoax/test/tree/master/c/glibc/pthread 目录 前言 pthread_join() pthread_detach() 前言 1 ...
- 主线程和子线程的关系(讨论主线程结束,子线程是否要回收)
主线程和子线程,在操作系统里面其实是一样的,没有本质区别.至于主线程结束,子线程是否要回收,下面有两种比较特殊的情况. 第一种: 主线程退出了,子线程还可以执行. 主要是因为pthread_exit函 ...
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...
- Android线程之主线程向子线程发送消息
和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...
- python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式
threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口 以后我们就用 threading 模块来管理线程就可以了. Tread 类:控制线程创建.启动及运行方式 一.线 ...
- qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
Qt之主线程与子线程通信(linux下) 转载请注明出处:http://blog.csdn.net/feng1790291543 主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息 ...
最新文章
- matplotlib库之patch
- Java 8 vs. Scala之Lambda表达式
- 编程入门python语言是多大孩子学的-包头孩子学编程python好吗
- 使用JDBC连接SQL Server数据库
- 未能加载文件或程序集“System.Data.SQLite, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139...
- 软件包管理器 RPM 升级软件包过程分析
- java信号量源代码_Java信号量Semaphore原理及代码实例
- Java 操作 JSON
- 模糊层次分析法matlab,求三角模糊数层次分析法(FEAHP)模型计算的MATLAB程
- 13.3.4 蓝牙程序案例: 蓝牙串口调试助手
- 2018考研信工所二室
- 从零开始自制实现WebServer(一)---- 万丈高楼平地起 步子得一步一步慢慢走
- 大学实训_软件毕设_Java入门实战_商场管理系统_Punrain
- 好大一个家 陈佩斯
- 知道浏览器下载的地方藏在哪里嘛?——看完你就知道
- csgo账号连接服务器错误,steam csgo连接服务器发生错误 | 手游网游页游攻略大全...
- Oracle 'open cursor loop fetch into' and 'for in cursor loop'
- 30# 如何将virtualbox的虚拟机目录移动位置
- 老船履带工具使用方法_船舶通导设备的日常维护要点归纳
- 科学家制造迄今最低温度新纪录
热门文章
- Shell:设置文件权限
- java饭店里面有五道菜, 黄花鱼 200块, 烤鸭 100块, 红烧肉 60块, 小炒肉 40块, 白水豆腐 10块。一个客人进了饭店, 根据身上的钱来决定最好能吃哪道菜 , 编程模拟。
- php抛物线函数,js绘制抛物线代码分享
- 魅蓝metal android7,魅族魅蓝metal的手机系统是什么?能升级安卓5.0吗?
- 坚持写作快两年了,有些私藏工具跟你们分享
- apple全家桶每一样在中国最高配置分别多少钱
- Dex.top(大力士)关于上线BOSC的公告
- TortoiseSVN日常使用指南 此博文包含图片
- 汽车违章查询免费API
- 使用Selenium模拟浏览器登录,并获取页面信息