小编Seb*_*ian的帖子

java代码执行在没有断点和正常运行的调试中产生不同的结果.ExecutorService坏了吗?

TL:ExecutorService executorService = Executors.newFixedThreadPool(8); 调试中的DR 运行并发,但在正常运行时它启动并发,但后来在单线程中运行.

我有一些代码,我开始4个不同的任务ExecutorService.其中两个任务应该几乎立即完成,另外两个应该运行一段时间.

这些任务以秒为单位返回执行时间Future<Double>.

此代码负责任务执行和测量:

public Future<Double> measure(int[] arr, ProcessIntArray processIntArray, ExecutorService es) {
    Callable<Double> task = () -> {
        long start = System.nanoTime();
        processIntArray.process(arr);
        long end = System.nanoTime();
        return (end - start) / 1000000000.0;
    };
    return es.submit(task);
}
Run Code Online (Sandbox Code Playgroud)

稍后,在启动这些任务后,我将按照先前运行的相同输入大小的执行时间顺序打印它们.

    Future<Double> bubbleSortTime = measure(bubbleSortArray, Solution::bubbleSort, executorService);
    Future<Double> insertionSortTime = measure(insertionSortArray, Solution::insertionSort, executorService);
    Future<Double> quickSortTime = measure(quickSortArray, Solution::quickSort, executorService);
    Future<Double> mergeSortTime = measure(mergeSortArray, Solution::mergeSort, executorService);


    System.out.println();
    System.out.println("array size:     " + size);
    System.out.println("quick …
Run Code Online (Sandbox Code Playgroud)

java multithreading jvm executorservice java-threads

25
推荐指数
1
解决办法
2667
查看次数

使用生成的JOOQ代码定位多个数据库类型

我想现在在开发过程中使用一个RDBMS和在生产中使用另一个RDBMS是很常见的.我想在开发中使用H2,在生产中使用MariaDB来实现Spring Boot和JOOQ应用程序.

是否有一些聪明的方法可以使相同的生成的JOOQ代码在开发和生产环境中都能工作,或者我是否需要根据目标环境生成两组代码?如果后者是真的,如何以理智的方式做到这一点,例如使用nu.studer.jooqgradle插件?

每当我尝试使用针对MariaDB服务器的H2数据库生成的源时,都会抛出这样的异常:

org.mariadb.jdbc.internal.util.dao.QueryException: SELECT command denied to user 'foo'@'localhost' for table 'FOO'
Query is: select `PUBLIC`.`FOO`.`ID`, `PUBLIC`.`FOO`.`NAME`, `PUBLIC`.`FOO`.`INFO` from `PUBLIC`.`FOO`
Run Code Online (Sandbox Code Playgroud)

我对H2和MariaDB使用相同的flyway初始化/迁移脚本.

h2 spring-jdbc mariadb jooq spring-boot

2
推荐指数
1
解决办法
520
查看次数