当前位置: 首页 > news >正文

怎样申请免费网站空间规范网站建设

怎样申请免费网站空间,规范网站建设,北京谁会做网站开发,百度外推排名Handler 机制是 Android 多线程间通信的一种常见方式。每个 Handler 对象由一个 Looper 和一个 MessageQueue 组成#xff0c;用于将 Message 对象处理到指定的线程中。通过创建 Handler 实例#xff0c;在子线程中创建 Message 对象并通过sendMessage()方法发送给 Handler用于将 Message 对象处理到指定的线程中。通过创建 Handler 实例在子线程中创建 Message 对象并通过sendMessage()方法发送给 Handler然后 Handler 会接收到消息并处理它。最后Handler 在处理完消息后会将消息回传至主线程再通过dispatchMessage()方法交由UI线程处理。 Looper 中在每一个线程上只有一个 ThreadLocal 线程是一个程序中执行的一条执行路径。每个线程都拥有自己的栈空间和寄存器等资源因此它们之间是互相独立的。为了避免在多线程环境下出现资源竞争、数据不一致等问题需要对线程之间的访问进行隔离和控制。其中一个解决方案就是使用 ThreadLocal。 ThreadLocal 是一个 Java 中的类它可以在每个线程中存储和获取与其他线程隔离的变量值。具体来说每个 ThreadLocal 对象都会存储到当前线程的 ThreadLocalMap 中。ThreadLocalMap 是一个以 ThreadLocal 对象为键、以变量值为值的 Map它可以快速地访问和获取每个线程所拥有的 ThreadLocal 变量的值。当一个线程结束时它所持有的 ThreadLocalMap 也会随之销毁。 在 Android 中Looper 是一个消息循环机制它可以让线程在消息队列中等待并处理消息。每个 Looper 对象都对应一个消息队列MessageQueue和一个函数loop()它可以不断地从消息队列中取出消息进行处理。 当我们调用 Looper.prepare() 方法时该方法会为当前线程创建一个新的 Looper 对象。在 prepare() 方法内部Looper 会将当前线程的 Looper 对象存储在一个名为 sThreadLocal 的 static 变量中。这个变量是一个 ThreadLocal 对象这个变量是一个 ThreadLocal 对象它可以在每个线程中存储和获取与其他线程隔离的变量值。由于 sThreadLocal 是一个 static 变量所以它在整个应用程序中只存在一个实例但是每个线程都可以通过这个变量来访问和管理自己的 Looper 对象。 具体来说sThreadLocal 变量会存储到当前线程的 Thread 类中的 ThreadLocalMap 中。当我们需要使用某个线程的 Looper 对象时只需要调用 Looper.myLooper() 方法即可获取当前线程所对应的 Looper 对象。这个方法会先获取当前线程的 ThreadLocalMap然后从中获取到 sThreadLocal 变量对应的值也就是当前线程的 Looper 对象。 通过使用 sThreadLocal 变量和 ThreadLocalMapLooper 可以实现多线程之间的隔离和独立确保每个线程都有自己的 Looper 对象。这个机制是 Android 框架中异步消息传递机制的核心之一也是实现各种异步操作的基础。 Looper 的阻塞 Looper 中有两个方面的阻塞 Message 不到时间空转等待 在某些情况下Message 还没到执行时间之前Looper 会一直进行循环不断地空转等待直到 Message 到了执行时间才继续执行。这种情况下Looper 并没有真正的阻塞它只是在等待 Message 到来。 MessageQueue 为空阻塞等待 如果 MessageQueue 中没有消息那么 Looper 会进入阻塞状态等待新的消息到来。这个过程中Looper 对 CPU 的占用率非常低因此不会对系统性能产生过大的影响。 需要注意的是第二种情况可能会导致线程进入无限等待状态从而造成应用程序的假死或 ANRApplication Not Responding错误。 Looper设计模式 Looper 使用了生产者-消费者设计模式其中 MessageQueue 充当生产者Looper 的 loop() 方法充当消费者。 具体来说MessageQueue 维护了一个消息队列消息队列中的消息相当于生产者生产出来的产品Looper 对消息队列进行消费和处理。在这个过程中MessageQueue 和 Looper 之间是解耦的它们可以独立地进行操作和管理。 当 MessageQueue 中产生新的消息时它会将消息加入到消息队列的尾部并通知 Looper 轮询消息队列。Looper 取到消息后会依次对每个消息进行分发和执行直到消息队列为空。整个过程中MessageQueue 和 Looper 都不需要关心对方的具体实现细节只需要按照约定好的协议进行数据传输和处理。 这种设计模式的优点是可以有效地降低耦合度并提高代码的可读性和维护性。通过将生产者和消费者分离我们可以更灵活地添加或修改消息的生产和消费方式而无需对整个系统进行大规模的修改。同时在多线程环境下生产者和消费者之间的协作也可以有效避免竞争和冲突保证了系统的线程安全性。 synchronized Looper 中使用了 synchronized 关键字来实现线程之间的同步。具体来说Looper 中的 loop() 方法和 MessageQueue 中的 enqueueMessage() 方法都是加了 synchronized 关键字的方法它们在执行时都会获取 MessageQueue 对象的锁确保同一时刻只能有一个线程访问和修改 MessageQueue。 这种同步机制是为了避免多个线程同时操作 MessageQueue 时产生的竞争和冲突。在 Android 系统中生产者和消费者之间是通过 Message 消息进行通信的因此必须保证 MessageQueue 中的消息能够正确地被分发和执行。如果没有同步机制就会出现多个线程同时向 MessageQueue 中添加消息或者同时取出并处理消息的情况从而导致数据不一致性和程序崩溃等问题。 例如 Looper.prepare() 方法中创建和初始化 Looper 对象时会加锁。由于每个线程只有一个 Looper 实例因此需要确保在创建新的 Looper 实例的同时不会出现多个线程同时执行该方法的情况。 Looper.loop() 方法中执行消息循环时会加锁。该方法会不断地从 MessageQueue 中取出消息进行分发和执行如果不加锁就会出现多个线程同时访问和修改 MessageQueue 的情况从而导致数据一致性和程序错误。 MessageQueue.enqueueMessage() 方法中添加消息到 MessageQueue 时会加锁。该方法会将新消息添加到 MessageQueue 的尾部并通知正在等待消息的线程有新的消息可用。如果不加锁就会出现多个线程同时向 MessageQueue 添加消息的情况可能导致消息顺序错乱或者丢失。 MessageQueue.next() 方法中获取下一个要处理的消息时会加锁。该方法会从 MessageQueue 的头部取出下一个要处理的消息并返回给调用者。如果不加锁就会出现多个线程同时取出并执行同一条消息的情况可能导致数据的不一致性和程序的错误。 Looper 使用 synchronized 原因 执行效率 synchronized 是 Java 中最基本和常用的同步机制由 JVM 内部实现可以比较方便地保证线程安全。相对于其他的锁实现synchronized 的执行效率相对较高避免了过多的性能开销。 粒度控制 在 Looper 的实现中使用 synchronized 关键字可以比较方便地控制锁的粒度避免了锁定过大的代码块或方法从而提高了并发性能。如果使用其他类型的锁可能会存在锁竞争或死锁影响程序正确性和性能。 可重入性 synchronized 是可重入锁即一个线程在持有锁的情况下还可以重复获取锁而不会出现死锁或其他的异常。在 Looper 中需要实现消息循环并处理消息时可能需要多次进入锁定代码块或方法因此使用可重入锁可以避免代码逻辑出错。 synchronized 是 Java 中最基本和常用的同步机制而且在大多数情况下可以提供良好的并发性能和可靠性。对于轻量级的同步需求synchronized 是不错的选择。 Handler线程间通信机制通过什么实现 Handler 是一种消息处理机制它提供了一种在不同线程之间进行通信的方式。由于·Handler 是在同一个进程中创建的因此它们可以共享进程中的内存从而实现线程间的通信。 当我们在一个线程中创建 Handler 时这个 Handler 会与当前线程中的 Looper 绑定并创建一个 MessageQueue 对象。然后我们可以使用这个 Handler 向该线程中的 MessageQueue 发送消息即构造 Message 对象并添加到该队列中这些消息就会被 Looper 接收并交给对应的 Handler 进行处理。 当我们需要在其他线程中发送消息时就需要使用 Handler 的 post 方法或者 sendMessage 方法这些方法会将要发送的消息封装成一个 PendingMessage 对象并加入到目标线程的消息队列中。最终目标线程中的 Looper 会将这个 PendingMessage 对象转化成 Message 对象并交给绑定的 Handler 进行处理。
http://www.w-s-a.com/news/511949/

相关文章:

  • 网站添加wordpress博客网上商城购物系统论文
  • 上海市建设安全协会网站王夑晟企业网站建设需要做些什么
  • 网站app 开发辽宁建设工程信息网官网新网站是哪个
  • 厦门建设企业网站建设wordpress添加形式
  • 建立什么网站可以赚钱室内设计效果图qq群
  • 厦门网站设计大概多少钱服务公司沈傲芳
  • 如何起手做网站项目百度站长app
  • dede 购物网站wordpress主题超限
  • 做啊录音网站WordPress音乐悬浮插件
  • 安徽建设厅证书查询网网站网站策划与运营课程认知
  • wordpress证书关闭重庆seo优化效果好
  • 直播网站建设模板网站活动怎么做的
  • 医院网站建设网站网站开发工资高嘛
  • 个人网站备案内容写什么做网站是不是涉及很多语言职
  • 怎么用手机做一个网站门户网站建设工作的自查报告
  • 网站搭建怎么收费浙江建设集团网站
  • 建网站怎么赚钱免费引流软件下载
  • 自建网站服务器备案做基础销量的网站
  • 淘宝 网站建设 发货音乐网站首页设计
  • 丽水做网站杭州建电商网站多少钱
  • 建设网站能解决什么问题wordpress 模板 中文
  • 平台型网站建设预算表友情链接中有个网站域名过期了会影响
  • 漯河网站开发运营seo是什么意思
  • 网站建设的征求意见稿iis 网站 红
  • 网站搭建教室企业网站开发实训心得
  • 阿克苏建设网站佛山app定制
  • 做淘宝网站要求与想法大型网站建设推荐
  • 在百度做网站赚钱吗跨境电商网站开发
  • 酒店网站建设策划方案南昌网站建设南昌
  • 临沂罗庄做网站房产cms