什么是多线程
线程是计算机进行运算调用的最小单元,包含在进程内。例如:一个微信在计算机后台属于一个进程,发送一句话是由一个线程完成的,同时要保存聊天的内容,是由另一个线程完成,所以在进程中有多个线程。
发送消息和保存聊天记录,在我们看起来是同时完成,只是宏观上看来。微观上是单个CPU将时间分成多个时间段,交替执行。只有在多个CPU处理器才会真正存在并行的操作。
为什么要用多线程
在单核CPU内,时间执行是串行,为什么还要用多线程呢?
1、防止阻塞,在单个线程执行I/O操作时,线程会等待。
2、提高效率,如果是单线程在双核CPU的机器上就浪费了50%的效率,4核 75%。
线程的状态
image.png
线程的创建方式
1、继承Thread类
public class MyThread extends Thread {
@Override
public void run(){
System.out.println("this is extends Thread");
}
}
MyThread myThread = new MyThread();
myThread.start();
2、实现Runable接口
public class MyThread2 implements Runnable {
@Override
public void run() {
System.out.println("this is implements runable");
}
}
MyThread2 myThread2 = new MyThread2();
Thread thread = new Thread(myThread2);
thread.start();
3、实现Callable接口
public class MyThread3 implements Callable {
@Override
public Object call() throws Exception {
return null;
}
}
MyThread3 myThread3 = new MyThread3();
FutureTask<Object> objectFutureTask = new FutureTask<Object>(myThread3);
Thread thread1 = new Thread(objectFutureTask);
thread1.start();
4、从线程池的方式
public class MyThread4 implements Callable {
@Override
public Object call() throws Exception {
return null;
}
}
ExecutorService pool = Executors.newFixedThreadPool(5);
for (int i = 0; i < 5; i++) {
Callable myThread4 = new MyThread4();
pool.submit(myThread4);
}
pool.shutdown();