我的项目:
nanshaws/nettyWeb: 复习一下netty,并打算做一个web项目出来 (github.com)
最近在项目中分别添加了虚拟线程操作mysql数据库,和用协程操作mysql数据库
同理先跟我这个博客操作一下前面的:就单纯代码的时候进行修改:
如何用java的虚拟线程连接数据库-CSDN博客
完整代码:
package org.tianfan.mysqlTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class Test002 {
static String name = "root";
static String password = "123456";
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/itheima?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Connection> coroutine1 = CompletableFuture.supplyAsync(() -> {
// 协程1的执行逻辑
Connection conn = null;
Statement stmt = null;
try {
// 注册 JDBC 驱动
Class.forName(JDBC_DRIVER);
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL, name, password);
System.out.println("连接成功...");
}catch (Exception e){
e.printStackTrace();
}
return conn;
});
CompletableFuture<String> coroutine2 = CompletableFuture.supplyAsync(() -> {
// 协程2的执行逻辑
return "进行数据库操作";
});
/**
* 其他耗时操作
*/
Connection connection = coroutine1.get();
System.out.println(coroutine2.get()); // 输出:Coroutine 2 finished.
}
}
这样做的好处就是不会在执行协程1的时候,不会阻塞主线程,直到主线程使用coroutine1.get();的时候才会阻塞主线程
结果图: