多线程场景下switch与if-else执行逻辑差异问题求助
问题根源:代码块的大括号缺失
嗨,我一眼就看出问题所在啦——你的if-else代码里缺失了关键的大括号,导致代码执行逻辑和你预期的完全不一样!
咱们来拆解一下:
- 在
switch语句里,case对应的代码块会被break精准控制,只会执行当前分支的内容。 - 但在你的
if-else代码里,实际执行逻辑是这样的:
这里的synchronized public void run() { if(ThreadChoice==1) dataBase(); // 只有这行属于if分支 else if(ThreadChoice==2) ViewTotal.choice=1; // 只有这行属于else if分支 new ViewTotal().displayDatabase(); // 这是独立语句,不管条件如何都会执行! }else if(ThreadChoice==2)只作用于紧跟它的那一行代码ViewTotal.choice=1;,而后面的new ViewTotal().displayDatabase();不受任何条件判断约束,所以不管ThreadChoice是1还是2,它都会被执行,这就是你觉得两个分支代码都跑起来的原因。
修正后的代码
只要把else if分支的代码用大括号{}明确包裹起来,就能和switch实现完全一致的逻辑:
synchronized public void run() { if(ThreadChoice==1){ dataBase(); } else if(ThreadChoice==2){ ViewTotal.choice=1; new ViewTotal().displayDatabase(); } }
简单总结下:Java里如果if/else后面的代码块超过一行,必须用大括号明确界定范围,否则只有第一行属于条件分支的执行内容。这是个很容易踩的小细节,下次写代码多留意就好啦😉
内容的提问来源于stack exchange,提问作者user9313201
相关产品推荐
相关产品推荐

