1、Thread类
1)、源码分析
public class Thread implements Runnable {
Thread类实现了Runable接口,他们之间具有多态的关系,其实使用继承Thread类的方式创建新线程时,最大的巨献就是不支持多继承,为了支持多继承,可以实现Runable接口的方式一边实现一边继承。
2)、Thread类的构造函数:
Thead类也实现了Runable接口,那也就意味着构造函数Thread(Runable target)不光可以传入Runable接口的对象,还可以传入一个Thread类的对象,这样做完全可以将一个Thread对象中的run()方法交由其他的线程进行调用。
2、使用多线程技术时,代码的运行结果与代码执行顺序或调用顺序是无关的
3、synchronize原理:
通过在run方法前加入synchronize关键字,使多个线程执行run方法时,以排队的方式进行处理。当一个线程调用run前,先判断run方法有没有被上锁,如果上锁,说明有其他线程正在调用run方法,必须等其他线程对run方法调用结束后才可以执行run方法。这样也就实现了排队调用run方法的目的。
4、非线程安全定义
非线程安全主要是指多个子线程对同一个对象中的同一个实例变量进行操作时会出现被更改、值不同步的情况,进而影响程序的执行流程。
5、Thread的主要方法
currentThread()可返回代码段正在被那个线程调用的信息。
isAlive()方法的主要功能是判断当前线程是否处于活动状态。
sleep()作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。
getId()作用是取得线程的唯一标识。
6、停止线程3种方法
1)、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2)、使用stop方法强行终止线程(已被作废,不推荐)
3)、使用interrupt方法中断线程。
4)、将方法interrupt()与return结合使用也能实现停止线程的效果。
7、判断线程是否是停止状态
- this.interrupted()
作用:测试当前线程是否已经是中断状态,执行后具有将状态标志置清除为false的功能。
声明:
public static boolean interrupted()
- this.isInterrupted()
- 作用:测试线程Thread对象是否已经是中断状态,但不清楚状态标志。
声明:
public boolean isInterrupted()
8、yield方法
yield方法的作用就是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。
9、线程的优先级
1)、setPriority()设置线程的优先级使用
JDK中使用的3个常量来预置定义优先级的值,代码如下:
public final static int MIN_PRIORIGY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
2)、线程优先级的继承特性
在java中,线程的优先级具有继承性,比如A线程启动B线程,则B线程的优先级与A是一样的。
3)、优先级具有随机性
因为现成的优先级还具有“随机性”,也就是优先级较高的线程不一定每一次都先执行完。