网站建设调研论文可以建网站的公司
参考上一篇: 线程的7种状态(NEW,RUNNABLE,Running,BLOCKED,WAITING,TINED_WATING,TEMINATE)-CSDN博客
-
系统启动时,线程池初始化:
- 当调用
Executors.newFixedThreadPool(2)
时,线程池会创建 2 个线程对象,这些线程对象处于 新建(New) 状态。
- 当调用
-
用户登录时,线程获取登录数据并访问登录接口:
- 当调用
threadPool.submit()
方法时,线程池会从空闲线程中选择一个线程来执行任务。此时,被选中的线程进入 就绪(Runnable) 状态,等待系统调度执行。 - 当系统为该线程分配 CPU 时间片后,线程进入 运行(Running) 状态,开始执行
UserLoginService.login()
方法中的代码。
- 当调用
-
查询数据库时:
- 当线程执行
DriverManager.getConnection()
方法时,需要等待数据库连接建立,此时线程进入 阻塞(Blocked) 状态。 - 当数据库连接建立成功后,线程继续执行 SQL 查询语句,仍然处于 阻塞(Blocked) 状态,直到查询结果返回。
- 当线程执行
-
线程执行完毕:
- 当
UserLoginService.login()
方法执行完毕后,线程的任务完成,进入 终止(Terminated) 状态。
- 当
通过以上示例,你可以清楚地看到线程在不同阶段的生命周期转换。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;// 模拟用户登录服务
class UserLoginService {private static final String DB_URL = "jdbc:mysql://localhost:3306/testdb";private static final String DB_USER = "root";private static final String DB_PASSWORD = "password";public void login(String username, String password) {// 模拟线程进入运行状态System.out.println(Thread.currentThread().getName() + " 开始处理登录请求,当前状态: 运行");try {// 模拟查询数据库,线程进入阻塞状态System.out.println(Thread.currentThread().getName() + " 开始查询数据库,当前状态: 阻塞");try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?")) {stmt.setString(1, username);stmt.setString(2, password);try (ResultSet rs = stmt.executeQuery()) {if (rs.next()) {System.out.println(Thread.currentThread().getName() + " 登录成功");} else {System.out.println(Thread.currentThread().getName() + " 登录失败");}}}} catch (SQLException e) {e.printStackTrace();}// 线程执行完毕,进入终止状态System.out.println(Thread.currentThread().getName() + " 登录处理完成,当前状态: 终止");}
}public class ThreadLifecycleExample {public static void main(String[] args) {// 系统启动时,线程池初始化,线程被创建,处于新建状态System.out.println("系统启动,初始化线程池");ExecutorService threadPool = Executors.newFixedThreadPool(2);System.out.println("线程池初始化完成,线程处于新建状态");// 用户登录时,从线程池获取线程,线程进入就绪状态String username = "testuser";String password = "testpassword";System.out.println("用户发起登录请求,从线程池获取线程,线程进入就绪状态");threadPool.submit(() -> {UserLoginService loginService = new UserLoginService();loginService.login(username, password);});// 关闭线程池threadPool.shutdown();}
}