为了账号安全,请及时绑定邮箱和手机立即绑定

略讲Android 中的多线程

标签:
Java Android

Handler

  • Handler必须在主线程中创建。
  • 默认情况下,消息队列只有一个,即主线程的消息队列。
  • 每个Hanlder都关联了一个线程,每个线程内部都维护了一个消息队列MessageQueue,这样Handler实际上也就关联了一个消息队列。
  • 消息队列通过Looper与线程关联,而handler又与Looper关联,因此handler最终就和线程、线程的消息队列关联上了。

Thread和Runnable

  • wait() 当一个线程执行到wait() 方法时,它就进入到一个和该对象相关的等待池中,同时失去(释放)了对象的机锁,使得其他线程可以访问。用户可以使用notify、notifyAll或者指定睡眠时间来唤醒当前等待池中打线程。
  • sleep() 该函数时Thread打静态函数,作用是调用线程进入睡眠状态,因此它不能改变对象打机锁。所以,当在一个Synchronized快中调用sleep方法时,线程虽然休眠了,但是对象打机锁并没有被释放,其他线程无法访问这个对象。
  • join() 等待目标线程执行完之后再继续执行。、
  • yield() 线程礼让,目标线程由运行状态转换为就绪状态,也就是让出执行权限,让其他线程得以优先执行,但其他线程是否优先执行是未知的。

线程池

java四种线程池的优点

  • 重用存在的线程,减少对象创建、销毁的开销。
  • 可有效控制最大并发线程,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
  • 提高定时执行、定期执行、单线程、并发控制等功能。

线程池原理简单解释就是创建多个线程并且进行管理,提交给线程打任务会被线程池指派给其中的线程进行执行,通过线程的统一调度、管理使得多线程的使用更简单、高效。

线程池的使用准则

  • 不要对那些同步等待其他任务结果的任务排队,这可能导致死锁。
  • 理解任务。有效地管理线程池的大小、理解正在排队的任务以及它们正在做什么。
  • 如果再一个具有N个处理器的系统上只有一个工作队列,其中全部是计算性质的任务,在线程池具有N或者N+1个线程一般会获得最大的CPU利用率。
  • 对于那些可能需要等待I/O完成的任务,需要让线程池的大小超过可用处理器的数目,因为并不是所有的线程都一直在工作。

同步集合

程序中的优化策略---CopyOnWriteArrayList

提高并发效率---ConcurrentHashMap

有效的方法---BlockingQueue(阻塞队列)

  • 当队列满时,再次调用put函数添加元素到队列,那么调用线程将会阻塞。

同步锁

同步机制的关键---Synchronized

  • 作用与对象、函数、类。
点击查看更多内容
7人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消