记一次小白用线程愚蠢事件。
小菜鸟的我总是感觉碰到了神奇的bug
大佬叮嘱的debug不能忘
如上图s为null
如上图赋值给s的ssk.getGwid()不为null
这就很神奇了。第一次遇见这种情况,有点摸不着头脑,请教了大佬。
原来是多线程所影响
我所定义的ssk本来就是在一个类,就直接
public SocketsFb ssk;
public OutputThread(SocketsFb ssk){
super();
this.ssk=ssk;
}
改为
public static SocketsFb ssk;
public OutputThread(SocketsFb ssk){
super();
this.ssk=ssk;
}
就ok了。Σ( ° △ °|||)︴
结果如下:
后边发现这并不是根本原因,拿到值了只是巧合而已。
其实,就是因为第一次进此线程时根本没有gwid,所以set给s时是空的,而我们debug时看到的明明get到gwid其实是第二次进此线程时的值,并不是当前set给s的值。 只需判空即可。
如下图:
悟:写代码不仅要理解技术问题,也要深知业务问题。