首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java执行器-不并行运行线程

Java执行器-不并行运行线程
EN

Stack Overflow用户
提问于 2013-09-18 14:31:55
回答 1查看 937关注 0票数 1

我试图使用java.util.concurrent.Executor并行执行独立的任务。

我有以下工作代码

代码语言:javascript
复制
public class MiniTest {

    private static String[] input;
        static {
            input = new String[] { 
                    "task1", 
                    "task2",
                    "task3",
                    "task4"
                };
        }

    public static void main(String[] args) throws InterruptedException {
        ExecutorService executor = Executors.newFixedThreadPool(2);
        boolean atleastOnePoolStarted = false;
        for (int i = 0; i < input.length; i++) {
            Runnable worker = new WorkerThread(input[i] + i);
            executor.execute(worker);
        }
        executor.shutdown();
        executor.awaitTermination(15,TimeUnit.MINUTES);
        System.out.println("Finished all threads");
    }
}

这是很好的工作,我看到并行执行。

但是问题是,当我用我的另一个类替换WorkerThread时,这个类是Runnable,并通过连接到数据库进行存储过程调用。在这种情况下,线程正在启动,但是对存储过程的实际调用似乎是以一种过程的方式进行的,即第二个java-proc调用在第一个调用完成之前不会被执行。

数据库部分工作正常,因为这是独立验证和测试的。我只需要同时打2-3个电话。我正在使用Sybase作为数据库。

以前有人遇到过这个问题吗?请告诉我可能出了什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-18 14:45:25

关于什么可能是错误的几个想法:

  • 您可能只打开一个连接(几年前我使用Sybase客户端时,它不是多线程保存)。
  • 存储过程锁定一些表,该表允许第二个调用等待并阻塞。SP是某种插入、更新、删除表的方式吗?也许在交易里面?那么第二个SP将等待第一个SP完成。
  • 我记得在Sybase上有一个长期存在的问题,就是创建一些对象(表、列、视图、临时表等)。它专门锁定了一些系统表,并让第二个SP等待第一个SP完成创建。也许有人可以建议,如果这种情况还能发生的话。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18875046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档