通过Rest API调用Java线程同步运行

时间:2017-01-16 10:42:29

标签: java multithreading

我通过Rest API调用Java线程。当用户单击“处理”按钮时,将调用此方法

@Override
    public String processTags(ServiceExecutionContext ctx, SetTag tags) throws ExecException {

        Thread t = new Thread(new TagService(customerId, tags));
        t.setName("Thread at "+new Date());
        t.start();
        return "Processing started in background";

    }

在TagService的运行方法

@Override
    public void run() {
        ServiceExecutionContext ctx = null;
        try {
            ctx = getServiceExecutionContextForCustomer(this.customerId);
            performUpdate(ctx,this.tags)
        } catch (HibernateException e) {
            e.printStackTrace();
        } finally {
            if(ctx != null)
                ctx.teardownNormal();
        }
    }

public static void performUpdate(ServiceExecutionContext ctx, String tags){
       String q = "Select column1 from table where id=1";
       List<String>list = ctx.getSession().createQuery(q).list();
       String currentVal = list.get(0);
       String newVal = currentVal + tag;
       String q1 = "Update table set column1=?";
    ctx.getSession().createQuery(q1).setParameter(0,newVal).executeUpdate();

}

假设两个用户一个接一个地请求进程。 Thread-1的值为A,Thread-2的值为B. Thread-1启动:从表中获取值表示它为空它将值A放入,现在在Thread-1提交之前,事务thread-2启动。当thread-2提取数据时,由于thread-1没有提交更改,因此该数据值仍为空。所以线程2它将B附加到空值。

当两个线程都提交事务时,用户将期望AB作为值,而是获得“B”。我怎么处理这个?

0 个答案:

没有答案