多线程高并发技巧分享

impatient_14063 9 0 zip 2023-10-04 18:10:35

  1. 避免使用stop()和suspend()方法的原因。stop()方法不安全,会解除获取的所有锁定并可能导致对象处于不连贯状态,很难检测问题所在。suspend()方法容易导致死锁,因为挂起的线程仍然持有之前获取的锁定,其他线程无法访问锁定资源而可能出现死锁。相应的解决方案是在自定义的Thread类中添加一个标志,指示线程是活动还是挂起。若标志指示挂起,使用wait()方法使线程进入等待状态;若标志指示恢复,使用notify()方法重新启动线程。
  2. sleep()和wait()的区别是,sleep()方法暂停当前线程的执行一段时间,期间仍然持有锁;而wait()方法会让线程进入等待状态,并释放所有持有的锁,在其他线程调用notify()或notifyAll()方法后才能被重新唤醒。两者用途和效果不同,合理选择以满足具体需求。

用户评论
请输入评论内容
评分:
暂无评论