我们有时候在写代码的时候有些疏忽大意,最近在做个网络连接问题出现了 这样一个BUG
问题描述:代码跑到手机上执行第一次连接的时候很顺畅,按照特定的流程进行,当我第二次连接
的时候,有时候会发生卡住一卡卡的情况严重影响游戏里面的主线程
在此检查代码 连接时候是用的单独的线程去连接,理论上不会影响主线程的运行。
代码结构贴出来
public class A implements Runnable{ public static int step = 0; public A(){} public void run(){ //循环开始 //------------------------ //逻辑步骤1 step = 0; //逻辑步骤2 step = 1; //------------------------ } }
这里在连接的过程中需要用户来请求 可以连续点击多次,经过上面的代码可以出现描述的问题了
写到这里有经验的同学可能会发现问题,如果没有被困扰的同学可能觉得这没啥问题
有经验的现在也许就知道怎么回事了
在这里会出现线程交互 共用一个step资源 导致两个线程间出现锁定状态
这个可以研究下线程交互 线程死锁问题 这里不一一介绍
上述描述一大堆 总结起来 我们在写代码的时候如果严格要求代码的质量,也许上述问题就会避免
public static int step = 0; 改成 private int step 私有的 这样安全咯