资料内容:
二、线程与线程池
线程与多线程
1.线程
在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是
CPU 调度的基本单位。线程本身基本上不拥有系统资源,只是拥有一些在运行时
需要用到的系统资源,例如程序计数器,寄存器和栈等。一个进程中的所有线程可
以共享进程中的所有资源。
2.多线程
多线程可以理解为在同一个程序中能够同时运行多个不同的线程来执行不同的任务,
这些线程可以同时利用 CPU 的多个核心运行。多线程编程能够最大限度的利用
CPU 的资源。如果某一个线程的处理不需要占用 CPU 资源时(例如 IO 线程),
可以使当前线程让出 CPU 资源来让其他线程能够获取到 CPU 资源,进而能够执
行其他线程对应的任务,达到最大化利用 CPU 资源的目的。
线程的实现方式
在 Java 中,实现线程的方式大体上分为三种,通过继承 Thread 类、实现
Runnable 接口,实现 Callable 接口。简单的示例代码分别如下所示。
1.继承 Thread 类代码
package io.binghe.concurrent.executor.test;
/**
* @author binghe
* @version 1.0.0
* @description 继承 Thread 实现线程
*/
public class ThreadTest extends Thread {
@Override
public void run() {
//TODO 在此写在线程中执行的业务逻辑
}
}
2.实现 Runnable 接口的代码
package io.binghe.concurrent.executor.test;
/*** @author binghe
* @version 1.0.0
* @description 实现 Runnable 实现线程
*/
public class RunnableTest implements Runnable {
@Override
public void run() {
//TODO 在此写在线程中执行的业务逻辑
}
}
3.实现 Callable 接口的代码
package io.binghe.concurrent.executor.test;
import java.util.concurrent.Callable;
/**
* @author binghe
* @version 1.0.0
* @description 实现 Callable 实现线程
*/
public class CallableTest implements Callable<String> {
@Override
public String call() throws Exception {
//TODO 在此写在线程中执行的业务逻辑
return null;
}
}
线程的生命周期
1.生命周期
一个线程从创建,到最终的消亡,需要经历多种不同的状态,而这些不同的线程状
态,由始至终也构成了线程生命周期的不同阶段。线程的生命周期可以总结为下图。