两阶段提交和TCC模式的区别
一、两阶段提交 两阶段提交是一种原子性操作,它有两个阶段:第一阶段是“预提交”阶段,第二阶段是“提交”阶段。在第一阶段,系统会验证事务是否可以执行,如果可以执行,则系统会将事务状态标记为“预提交”,这样客户端就可以放心地执行第二阶段的“提交”操作,这样就保证了事务的原子性。
二、TCC模式 TCC模式也是原子性操作,但它有三个阶段:第一阶段是“尝试”阶段,第二阶段是“确认”阶段,第三阶段是“取消”阶段。在第一阶段,系统会验证事务是否可以执行,如果可以执行,则系统会将事务状态标记为“尝试”;在第二阶段,客户端会根据第一阶段的结果,决定是否执行第二阶段的“确认”操作,如果决定执行,则事务就会成功提交;如果不执行,则客户端会执行第三阶段的“取消”操作,这样就保证了事务的原子性。
两阶段提交java代码实现 //定义事务 public class Transaction { //记录事务状态 private boolean isCommitted; //记录事务ID private int transactionId; public Transaction(int transactionId) { this.transactionId = transactionId; this.isCommitted = false; } //尝试预提交事务 public boolean tryPreCommit() { //验证事务是否可以执行 if (checkTransaction()) { //如果可以执行,则将事务状态标记为“预提交” isCommitted = true; return true; } return false; } //提交事务 public boolean commit() { //如果事务状态为“预提交”,则执行提交操作 if (isCommitted) { //执行提交 //…… return true; } return false; } //验证事务是否可以执行 private boolean checkTransaction() { //根据transactionId查询数据库,验证事务是否可以执行 //…… return true; } } TCC模式java代码实现 //定义事务 public class Transaction { //记录事务状态 private int status; //记录事务ID private int transactionId; public Transaction(int transactionId) { this.transactionId = transactionId; this.status = 0; } //尝试预提交事务 public boolean tryPreCommit() { //验证事务是否可以执行 if (checkTransaction()) { //如果可以执行,则将事务状态标记为“尝试” status = 1; return true; } return false; } //确认提交事务 public boolean confirm() { //如果事务状态为“尝试”,则执行确认操作 if (status == 1) { //执行确认 //…… return true; } return false; } //取消提交事务 public boolean cancel() { //如果事务状态为“尝试”,则执行取消操作 if (status == 1) { //执行取消 //…… return true; } return false; } //验证事务是否可以执行 private boolean checkTransaction() { //根据transactionId查询数据库,验证事务是否可以执行 //…… return true; } }
标签:事务,return,区别,public,提交,transactionId,执行,TCC From: https://www.cnblogs.com/deepalley/p/17107277.html