1700449979
1700449980
}
1700449981
1700449982
}
1700449983
1700449984
总之,如果期望终止一个正在运行的线程,则不能使用已经过时的stop方法,需要自行编码实现,如此即可保证原子逻辑不被破坏,代码逻辑不会出现异常。当然,如果我们使用的是线程池(比如ThreadPoolExecutor类),那么可以通过shutdown方法逐步关闭池中的线程,它采用的是比较温和、安全的关闭线程方法,完全不会产生类似stop方法的弊端。
1700449985
1700449986
1700449987
1700449988
1700449990
编写高质量代码:改善Java程序的151个建议 建议121:线程优先级只使用三个等级
1700449991
1700449992
线程的优先级(Priority)决定了线程获得CPU运行的机会,优先级越高获得的运行机会越大,优先级越低获得的机会越小。Java的线程有10个级别(准确地说是11个级别,级别为0的线程是JVM的,应用程序不能设置该级别),那是不是说级别是10的线程肯定比级别为9的线程先运行呢?我们来看如下一个多线程类:
1700449993
1700449994
class TestThread implements Runnable{
1700449995
1700449996
//启动线程
1700449997
1700449998
public void start(int_priority){
1700449999
1700450000
Thread t=new Thread(this);
1700450001
1700450002
//设置线程优先级
1700450003
1700450004
t.setPriority(_priority);
1700450005
1700450006
t.start();
1700450007
1700450008
}
1700450009
1700450010
@Override
1700450011
1700450012
public void run(){
1700450013
1700450014
//消耗CPU的计算,性能差的机器,请修改循环限制
1700450015
1700450016
for(int i=0;i<100000;i++){
1700450017
1700450018
Math.hypot(Math.pow(924526789,i),Math.cos(i));
1700450019
1700450020
}
1700450021
1700450022
//输出线程优先级
1700450023
1700450024
System.out.println(“Priority:”+Thread.currentThread().getPriority());
1700450025
1700450026
}
1700450027
1700450028
}
[
上一页 ]
[ :1.700449979e+09 ]
[
下一页 ]