打字猴:1.700450109e+09
1700450109
1700450110 //普通优先级,默认值
1700450111
1700450112 public final static int NORM_PRIORITY=5;
1700450113
1700450114 //最高优先级
1700450115
1700450116 public final static int MAX_PRIORITY=10;
1700450117
1700450118 }
1700450119
1700450120 在编码时直接使用这些优先级常量,可以说在大部分情况下MAX_PRIORITY的线程会比NORM_PRIORITY的线程先运行,但是不能认为必然会先运行,不能把这个优先级做为核心业务的必然条件,Java无法保证优先级高肯定会先执行,只能保证高优先级有更多的执行机会。因此,建议在开发时只使用此三类优先级,没有必要使用其他7个数字,这样也可以保证在不同的操作系统上优先级的表现基本相同。
1700450121
1700450122 明白了这个问题,那可能有读者要问了:如果优先级相同呢?这很好办,也是由操作系统决定的,基本上是按照FIFO原则(先入先出,First Input First Output),但也是不能完全保证。
1700450123
1700450124 注意 线程优先级推荐使用MIN_PRIORITY、NORM_PRIORITY、MAX_PRIORITY三个级别,不建议使用其他7个数字。
1700450125
1700450126
1700450127
1700450128
1700450129 编写高质量代码:改善Java程序的151个建议 [:1700438197]
1700450130 编写高质量代码:改善Java程序的151个建议 建议122:使用线程异常处理器提升系统可靠性
1700450131
1700450132 我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据交互是经常使用的,这类接口通常需要考虑两个问题:一是避免线程阻塞,保证接收的数据尽快处理;二是接口的稳定性和可靠性问题,数据包很复杂,接口服务的系统也很多,一旦守候线程出现异常就会导致Socket停止响应,这是非常危险的,那我们有什么办法来避免吗?
1700450133
1700450134 Java 1. 5版本以后在Thread类中增加了setUncaughtExceptionHandler方法,实现了线程异常的捕捉和处理。可能大家会有一个疑问:如果Socket应用出现了不可预测的异常是否可以自动重启呢?其实使用线程异常处理器很容易解决,我们来看一个异常处理器应用的例子,代码如下:
1700450135
1700450136 class TcpServer implements Runnable{
1700450137
1700450138 //创建后即运行
1700450139
1700450140 public TcpServer(){
1700450141
1700450142 Thread t=new Thread(this);
1700450143
1700450144 t.setUncaughtExceptionHandler(new TcpServerExceptionHandler());
1700450145
1700450146 t.start();
1700450147
1700450148 }
1700450149
1700450150 @Override
1700450151
1700450152 public void run(){
1700450153
1700450154 //正常业务运行,运行3秒
1700450155
1700450156 for(int i=0;i<3;i++){
1700450157
1700450158 try{
[ 上一页 ]  [ :1.700450109e+09 ]  [ 下一页 ]