《Java多线程编程核心技术》(一)多线程技能

最近阅读了一本《Java多线程编程核心技术》,总结了一下每章的知识点:

第一章,java多线程技能

知识点:

1,实现多线程编程的方式主要有两种:一是继承Thread类,重新run方法,二是实现Runnable接口,实现run方法,对象作为构造参数传入Thread对象进行start()启动。(第二种方式支持多继承情况)

2,currentThread()方法可以返回代码段正在被哪个线程调用的信息。
Thread.currentThread().getName();

3,isAlive(),判断当前的线程是否处于活动状态。thread.isAlive()。

4,sleep(),在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行),这个”正在执行的线程”是指this.currentThread()返回的线程。

5,getId(),取得线程的唯一标识。

6,停止线程
①使用退出标识,使线程正常退出,也就是当run方法完成后线程终止。
②使用stop方法强行终止线程,已不推荐使用,作废。
③使用interrupt方法中断线程,但不是立即停止的。
this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志置清除为false的功能。
this.isInterrupted():测试线程是否已经中断状态,但不清除状态标志。
④异常法停止线程。
在线程sleep期间,如果执行了interrup方法会报异常。

7,暂停线程 suspend,恢复线程 resume,方法缺点,极易对公共的同步对象的独占,使其他线程无法访问 。

8,yieId(),作用是放弃当前的CPU资源,将它让给其他任务去占用CPU执行时间,但放弃时间不确定,有可能刚刚放弃,又马上获得CPU时间片。

9,线程的优先级,优先级较高的线程得到的CPU资源越多,java中,线程的优先级分为1-10个等级,超出范围抛出异常。JDK中使用3个常量来预置定义优先级的值,1,5,10。
①线程优先级具有继承特性,比如A线程启动B线程,则B线程的优先级和A是一样的。
②优先级具有规则性,可以使用setPriority()方法设置线程的优先级。高优先级的线程总是大部分先执行完,但不代表高优先级的线程全部【先】执行完,CPU尽量将执行资源让个优先级比较高的线程。(两个线程优先级差值比较大)
③优先级具有随机性。如果两个线程的线程优先级差别不大,高优先级的不一定先执行完。
④高优先级的运行的较快。

10,守护线程。典型的守护线程(GC)就是垃圾回收线程。守护线程:任何一个守护线程都是整个JVM中所有非守护线程的“保姆”,只要当前JVM实例中存在任何一个非守护线程,守护线程就在工作,只有当最后一个非守护线程结束时,守护线程才会随着JVM一同结束工作。

你可能感兴趣的:(java,多线程)