一、我们为什么要使用多线程
首先要了解一点,我们跑程序最耗时的是io读写,所以会出现来了很多请求,却要等待第一个请求io结束才能继续接受下一个请求,非常影响效率;另外,单线程的请求处理是线性的,前端发起请求需要等待后台所有的都处理结束前端才有响应,非常影响体验。
针对这两点,多线程的优势在于:
1.资源利用率高
2.程序响应快
二、多线程的缺点
多线程的上下文切换需要耗费时间,如果处理不好,处理速度反而会变慢;
多线程涉及线程安全,并发处理,如果处理不好,会造成逻辑混乱,导致结果错误;
所以我们使用多线程一定要处理好线程安全的问题
三、多线程的几种实现方式
1.继承Thread类,重写run方法
这种方式看过源码就知道,Thread类其实也是实现了Runnable接口
实例代码如下
public class ThreadTest extends Thread {
public void run() {
System.out.println("Test is Running");
}
public static void main(String[] args) {
ThreadTest myThread = new ThreadTest();
myThread.start();
}
}
2.实现Runnable接口
代码实现如下:
public class RunnableTest implements Runnable {
@Override
public void run() {
System.out.println("Runnable is Running");
}
public static void main(String[] args) {
Thread thread = new Thread(new RunnableTest());
thread.start();
}
}
3.使用线程池
这种方式是我们实际应用中最推荐的方式,原因有一下几点
1.创建和销毁线程会消耗时间和资源,如果使用线程池就可以大大减少这个时间和资源的消耗
2.线程池对线程的管理更加方便有条理
如何创建一个简单的线程池
(还没掌握这个,待补充。。。)