多线程下的if,经常是while(...)
对于死等,在jdk中很多使用了 for(;;)
狗了一下 while(true) vs for(;;),有种说法是汇编级别,for(;;)更节省。
当然,该结论没代码,没版本,没验证方法,暂报疑惑。且22世纪了,代码可以傻些。
sun jdk 6 ,默认编译。
使用 Java Bytecode Editor和 JD 看了一下 *.class
能看到 (1)和(2) 被编译器弄成一样了。
等效于:
(3)等效于
基本结论,
1. 个人习惯,爱用哪个用哪个,编译器都会私下做些事。
2. for (int i = 1; i > 0; i++) 不是死等,上限是正数最大值。
所以对于不太确定是否死掉的死等,这个算是活等。
对于死等,在jdk中很多使用了 for(;;)
狗了一下 while(true) vs for(;;),有种说法是汇编级别,for(;;)更节省。
当然,该结论没代码,没版本,没验证方法,暂报疑惑。且22世纪了,代码可以傻些。
while (true) { //(1)
//for (;;) { //(2)
//for (int i = 1; i > 0; i++) //(3)
if (args.length == 1) break;
if (args.length == 2) break;
}
sun jdk 6 ,默认编译。
使用 Java Bytecode Editor和 JD 看了一下 *.class
能看到 (1)和(2) 被编译器弄成一样了。
等效于:
while ((args.length != 1) && (args.length != 2));
(3)等效于
for (int i = 1; i > 0; i++)
if ((args.length == 1) || (args.length == 2)) break;
基本结论,
1. 个人习惯,爱用哪个用哪个,编译器都会私下做些事。
2. for (int i = 1; i > 0; i++) 不是死等,上限是正数最大值。
所以对于不太确定是否死掉的死等,这个算是活等。