java协程操作mysql数据库

我的项目:

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();的时候才会阻塞主线程

结果图:

posted @ 2023-11-23 10:33  过移  阅读(26)  评论(0编辑  收藏  举报  来源