-
线程和进程
线程就是一条执行路径。
进程是指一个独立的应用程序,进程可以看做是一些线程的集合。 -
进程是如何工作的
人为总是认为线程是同时进行工作的,但其实时CPU在底部进行不断地切换,只是切换的时间比较短,所以我们认为是同时进行的。 -
为什么我们要使用多线程
提高程序的运行效率。(但是多线程也不是越多越好,比较占用内存) -
多线程的应用场景
迅雷多线程下载、数据库连接池、分批发送短信。 -
多线程的创建方式
继承Thread类、实现Runable接口、匿名内部类、线程池创建。 -
同步和异步的概念
同步就是一条执行路径,从上往下执行。
异步就是有不同的线程去完成不同的执行路径,互相不影响。 -
多线程的几种状态
准备、就绪、运行、阻塞、死亡。
-
用户线程与守护线程
守护线程是所有的用户线程销毁只后就会自动销毁,最有名的守护线程就是GC线程。设置守护线程的方法是线程.setDameon(true);
,但必须在启动线程之前设置,否则会报出异常。 -
join方法
A线程正在执行,在A线程中调用了B线程的join方法,那么A线程会进入阻塞的状态(释放CPU执行权),等待B线程执行完毕之后在执行。但是调用join方法之前,线程必须也调用过启动的方法。
引申出的经典面试题:如何让A\B\C三个线程按照顺序执行。
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
System.out.println("t1 : " + i);
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
System.out.println("t2 : " + i);
}
});
Thread t3 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
System.out.println("t3 : " + i);
}
});
try {
t1.start();
t1.join();
t2.start();
t2.join();
t3.start();
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}