hibernate多线程插入数据无法进行

`

public void addStockHistoryData() {

    StockCrawler sc = new StockCrawler();

    ArrayList<String> codes = getAllStockCodes();

    ExecutorService pool = Executors.newFixedThreadPool(100);

    CompletionService<ArrayList<StockHistoryData>> cs = new ExecutorCompletionService<ArrayList<StockHistoryData>>(
            pool);

    for (int i = codes.size() - 1; i > 800; i--) {

        String code = codes.get(i);

        cs.submit(new Callable<ArrayList<StockHistoryData>>() {

            @Override

            public ArrayList<StockHistoryData> call() throws Exception {

                System.out.println("getting " + code);

                ArrayList<StockHistoryData> sd = sc.getHistoryData(code, "300");

                Session s = sessionFactory.openSession();

                s.beginTransaction();

                for (StockHistoryData d : sd) {

                    s.saveOrUpdate(d);

                }

                s.getTransaction().commit();

                s.close();

                return sd;

            }

        });
    }

`
这是多线程存数据的代码段,hibernate的show_sql设置为true,但是看到打印到某一句就停止执行了,也不报异常,怀疑是出现了死锁,但是不知道是什么操作可能导致这个问题?该怎么解决呢?

1个回答

打印到哪一句停止执行了?
这个开启了事务,在事务执行的步骤中就算多线程也要等事务完成第二个线程才能进入事务啊

kh945926945
kh945926945 就是普通的一句insert语句,hibernate中也看不出来是执行到哪一个对象的插入
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问