Android开发——线程安全问题
死锁
产生的原因:
- 多个操作者争夺多个资源(操作者>资源数>=2)
- 拿到资源不放手
- 争夺资源的顺序不对
危害:
- 线程不工作了,但是整个程序还是活着的
- 没有任何的异常信息可以供我们检查
- 一旦程序发生了发生了死锁,是没有任何的办法恢复的,只能重启程序,对正式已发布程序来说,这是个很严重的问题。
解决方式:
- 调整拿锁的顺序,采用尝试拿锁机制(tryLock)。
- 内部通过顺序比较,确定拿锁的顺序。
活锁
两个线程在尝试拿锁的机制中,发生多个线程之间互相谦让,不断发生同一个线程总是拿到同一把锁,在尝试拿另一把锁时因为拿不到,而将本来已经持有的锁释放的过程。
解决办法:每个线程休眠随机数,错开拿锁的时间。
线程饥饿
低优先级的线程,总是拿不到执行时间