在业务逻辑中,开启多线程,可以提高性能,但是子线程报错,主线程难以捕获,导致事务特性难以保证。即主线程异常,如何回滚所有子线程,一个子线程异常,如何回滚主线程和其它所有子线程。经过实践,封装了一个工具类,用以保证多线程事务特性。
思路:
线程相互等待。主线程等子线程执行,如子线程有异常,主线程手动抛出,如无异常,子线程等主线程执行,如主线程有异常,回滚事务,如无,提交事务,等所有子线程执行完事务,主线程返回结果。
代码如下:
1 | 4j |
1 | 4j |
1 |
|
1 |
|
使用方法:直接调用 X.asyncList()、X.asyncTransacTion(),前者支持子线程报错抛到主线程,后者支持事务
1 |
|