多线程
1、基本概念
进程:一个独立执行的程序 。
线程:进程中的执行流程 。CPU的最小执行单元 。
单线程:程序代码按调用顺序依次往下执行,只有一条执行路径;
多线程:程序需要同时完成多段代码的操作,有多条执行路径 。
代码示例:
public class Demo {
public static void main(String[] args) {
show();
}
public static void show(){
function1();
function2();
}
public static void function1(){
System.out.println("One");
}
public static void function2(){
System.out.println("Two");
}
}
单线程执行路径:
多线程执行路径:
2、线程调度
Java使用抢占式调度模型,因此可以通过设置优先级来调度线程 。
优先级:MIN_PRIORITY=1
MAX_PRIORITY=10
NORM_PRIORITY=5 (默认)
设置优先级:public final void setPriority(int newPriority)
注:线程优先级高,仅表示该线程获取CPU时间片的几率比较高,并不保证该线程每一次总是先执行,只是大部分时间总是先执行。
3、线程控制
睡眠:public static void sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。
加入:public final void join()
等待该线程终止。
礼让:public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。
守护:public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程 。
当所有线程都为守护线程时,JVM退出,即线程不再执行 。
中断:public void interrupt()
中断线程 。
中断抛出InterruptedException异常,执行异常里的代码,以及异常之后的代码 。
区别于已经过时的stop()方法,中断之后不执行任何代码,彻底结束 。
4、线程生命周期