多线程
程序启动后变为进程,进程由单或多个线程组成。
多线程:并行,共享资源,实现多任务。
五个状态:新建,就绪,运行,阻塞,死亡
JVM的线程调度模式采用了抢占式模式,即根据线程的优先级来获取CPU的使用权。
主线程:JVM调用程序main()所产生的线程。
当前线程:一般指通过Thread.currentThread()来获取的进程。
后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。
前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。
创建多线程的方法:Thread类实际上也是实现了Runnable接口的类
a.实现Runnable接口,实现run方法<线程体>,调用方式:new Thread(new MyRunnable()).start();
b.继承Thread类,重写run方法<线程体>,调用方式:new MyThread().start();
常见方法:
start():新建的线程进入Runnable状态
run():线程进入Running 状态
isAlive():是否在活动状态,如果线程已经启动且尚未终止,则为活动状态。如果是活动状态,返回 true;否则 false
wait():JVM会把该线程放入等待池中,线程进入等待状态,等待被notify,这是一个对象方法,而不是线程方法
notify() / notifyAll():唤醒其他的线程,这是一个对象方法,而不是线程方法
yield():线程放弃执行,使其他优先级不低于此线程的线程有机会运行,它是一个静态方法
getPriority() / setPriority():获得/设置线程优先级(1->10),默认5
sleep():JVM会把该线程置为阻塞状态,线程睡眠指定的一段时间
join():JVM会把该线程置为阻塞状态,调用这个方法的主线程,会等待加入的子线程执行完成
setDaemon(thread):设置后台线程(守护线程)
同步机制:控制资源的一致性,加锁
synchronized: 同步方法和对象
volatile:同步变量<除final常量外其余均可修饰>