java协程操作mysql数据库
我的项目:
nanshaws/nettyWeb: 复习一下netty,并打算做一个web项目出来 (github.com)
最近在项目中分别添加了虚拟线程操作mysql数据库,和用协程操作mysql数据库
同理先跟我这个博客操作一下前面的:就单纯代码的时候进行修改:
完整代码:
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();的时候才会阻塞主线程
结果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律