1700449709
1700449710
}
1700449711
1700449712
}
1700449713
1700449714
//本地方法
1700449715
1700449716
private native void start0();
1700449717
1700449718
注意看start0方法和stop0方法的顺序,start0方法在前,也就是说即使stopBeforeStart为true(不可启动),也会先启动一个线程,然后再stop0结束这个线程,而罪魁祸首就在这里!
1700449719
1700449720
明白了原因,我们的情景代码也就很容易修改了,代码如下:
1700449721
1700449722
public static void main(String[]args){
1700449723
1700449724
//不分昼夜的制造垃圾邮件
1700449725
1700449726
while(true){
1700449727
1700449728
//条件判断,不符合条件就不创建线程
1700449729
1700449730
if(!false){
1700449731
1700449732
//多线程多个垃圾邮件制造机
1700449733
1700449734
new SpamMachine().start();
1700449735
1700449736
}
1700449737
1700449738
}
1700449739
1700449740
}
1700449741
1700449742
不再使用stop方法进行状态的设置,直接通过判断条件来决定线程是否可启用。对于start方法的该缺陷,一般不会引起太大的问题,只是增加了线程启动和停止的精度而已。
1700449743
1700449744
1700449745
1700449746
1700449748
编写高质量代码:改善Java程序的151个建议 建议120:不使用stop方法停止线程
1700449749
1700449750
线程启动完毕后,在运行时可能需要终止,Java提供的终止方法只有一个stop,但是我不建议使用这个方法,因为它有以下三个问题:
1700449751
1700449752
(1)stop方法是过时的
1700449753
1700449754
从Java编码规则来说,已经过时的方法不建议采用。
1700449755
1700449756
(2)stop方法会导致代码逻辑不完整
1700449757
1700449758
stop方法是一种“恶意”的中断,一旦执行stop方法,即终止当前正在运行的线程,不管线程逻辑是否完整,这是非常危险的。看如下的代码:
[
上一页 ]
[ :1.700449709e+09 ]
[
下一页 ]