我有以下方法来创建transactioID,我想知道它是否在多线程执行时创建相同的id 我可以通过这种方法遇到什么样的问题?
private String getTransactionId(){
StringBuffer buf = new StringBuffer("");
buf.append(this.getPrefix());
buf.append(this.getApplicationId());
buf.append(this.getThreadId());
buf.append(System.currentTimeMillis());
try{
Thread.sleep(1);
}
catch(Exception e){
}
while(buf.length()<19){
buf.append("0");
}
return buf.toString();
}
答案 0 :(得分:1)
如果我们可以假设this.getPrefix(),getApplicationID()和getThreadID()方法本身是线程安全的,那么这个方法是线程安全的。它不访问任何对象的成员。
StringBuffer对象只能通过调用线程堆栈上的buf
变量访问,因此只能通过创建它的线程访问它。