Android开发——线程安全问题

死锁

产生的原因:

  • 多个操作者争夺多个资源(操作者>资源数>=2)
  • 拿到资源不放手
  • 争夺资源的顺序不对

危害:

  • 线程不工作了,但是整个程序还是活着的
  • 没有任何的异常信息可以供我们检查
  • 一旦程序发生了发生了死锁,是没有任何的办法恢复的,只能重启程序,对正式已发布程序来说,这是个很严重的问题。

解决方式:

  • 调整拿锁的顺序,采用尝试拿锁机制(tryLock)。
  • 内部通过顺序比较,确定拿锁的顺序。

 

活锁

 

两个线程在尝试拿锁的机制中,发生多个线程之间互相谦让,不断发生同一个线程总是拿到同一把锁,在尝试拿另一把锁时因为拿不到,而将本来已经持有的锁释放的过程。

 

解决办法:每个线程休眠随机数,错开拿锁的时间。

 

线程饥饿

 

低优先级的线程,总是拿不到执行时间

posted @ 2020-11-28 09:52  金大人的梦  阅读(201)  评论(0编辑  收藏  举报