学习《java多线程编程核心技术》(2)

第二天

1.7停止线程

在java中有以下三种方法可以终止正在运行的线程:

(1)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止

(2)使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和suspend及resume一样,都是作废过期的方法,使用他们可能产生不可预料的结果

(3)使用interrupt方法中断线程

interrupted()方法和isInterrupted()方法

(1)this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志置清除为false的功能

(2)this.isInterrupted():测试线程Thread对象是否已经是中断状态,但不清楚状态标志

在线程中用for语句来判断一下线程是否是停止状态,如果是停止状态,则后面的代码不再运行即可

(1)for+break组合

使用for+break组合,虽然停止了线程,但如果for语句下面还有语句,还是会继续运行的

(2)interrupted+throw new InterruptedException(抛出异常)

(3)interrupted+return;

建议使用”抛异常“法来实现线程的停止,因为在catch块中可以对异常的信息进行相关的处理,而且使用异常流能更好、更方便地控制程序的运行流程,不至于代码中出现很多个return;造成污染

1.10线程的优先级

在操作系统中,线程可以划分优先级,优先级较高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务

设置线程的优先级使用setPriority()方法,在java中,线程的优先级分为1~10这10个等级,如果小于1或者大于10,则JDK爆出异常throw new IllegalArgumentException()

JDK中使用3个常量来预置定义优先级的值

public final static int MIN_PRIORITY=1;

public final static int NORM_PRIORITY=5;

public final static int MAX_PRIORITY=10;

1.10.1线程优先级的继承特性

在java中,线程的优先级具有继承性,比如A线程启动B线程,则B线程的优先级与A是一样的

1.10.2优先级具有规则性

高优先级的线程总是大部分先执行完,但不代表高优先级的线程全部先执行完

当线程优先级差距很大时,谁先执行完和代码的调用顺序无光

CPU尽量将执行资源让给优先级比较高的线程

阅读更多
想对作者说点什么? 我来说一句

Java多线程编程核心技术_完整版.pdf

2017年12月11日 30.87MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭