坑人的Synchronized,请慎用!

为什么说坑人呢,因为在同一个项目里面遇到两个坑了。

1、其中的原因都是一样的:一个类中有多个方法是同步的,线程A调用了其中一个同步方法,然后线程B在去尝试调用其他的同步方法就会出现阻塞的问题。一般情况下阻塞一会是正常的,但是如果线程A里面阻塞时间太长就会严重影响线程B的执行。

我的项目里面的情况就是线程A陷入了死循环导致不释放锁从出现上述问题,而线程A陷入死循环的原因又是其他问题导致的;

2、这个项目与摄像有关,所以一开始还以为是视频生成或者摄像头的问题,搞了半天,不过在查找是否是摄像头录像问题的时候使用到了假设性原则,即假设确实是这个问题导致的,然后在通过其他点其他路径去确认是否真的是这个问题,比如说有关代码是否都有try,如果有就不会影响其他功能也就表示这个猜想八成是错的。

解决问题的一般方法:

首先根据功能逻辑以及问题的表现形式大概判断问题的范围,然后用下面的方法进一步处理:

a)查看日志,我们要学会正确打印日志的姿势。比如在一个核心方法开头输出一条日志表示进入了那个方法或者遇到分支的情况也需要打印一条日志表示进入哪条分支以便后期分析问题,我们可以在日志文件中快速定位到出问题的日志附近,同时还可以快读定位到有问题的代码附近。

b)另外一种就是调试或者直接分析代码啦。

目的就一个:就是快速定位到问题点,提高解决问题的效率。

猜你喜欢

转载自blog.csdn.net/jiayouwangqiuwangzi/article/details/80747100