为了账号安全,请及时绑定邮箱和手机立即绑定

新开一个线程事务怎么控制?

新开一个线程事务怎么控制?

Qyouu 2019-02-19 08:38:09
在run方法里没法用@Transactional来做事务,run方法上又不能加exception,怎么能控制事务保证异常就回滚呢?
查看完整描述

4 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

run方法里调service方法。

查看完整回答
反对 回复 2019-03-01
?
千巷猫影

TA贡献1829条经验 获得超7个赞

ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<Object> future = executorService.submit(new Callable<Object>() {
    @Override
    public Object call() throws Exception {
        // return results
        return null;
    }
});
// get results
future.get();

通过concurrent并发编程中的api可以拿到线程的返回值。

final Lock lock = new ReentrantLock();
final Condition condition = lock.newCondition();
final AtomicReference<Object> results = new AtomicReference<>();
Thread t = new Thread() {

    @Override
    public void run() {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        lock.lock();
        // set results
        results.set("success");
        condition.signalAll();
        lock.unlock();
    }
};
t.start();

lock.lock();
condition.await();
// get results
System.out.println(results.get());
lock.unlock();

普通线程也可以使用上述方式模拟线程的返回值,来决定事务的commit/rollback

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 1162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信