先说结果,不是安全的
展示下枚举单例代码:
package com.self.entity;
public enum LogSingleton {
LOG("TE",0);
private String name;
private int count;
LogSingleton(String name, int count) {
this.name = name;
this.count = count;
}
public LogSingleton add(){
//对数据进行操作,可以认为是统计使用次数
this.count = this.count + 1;
return LogSingleton.LOG;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("LogSingleton{");
sb.append("name='").append(name).append('\'');
sb.append(", count=").append(count);
sb.append('}');
return sb.toString();
}
}
然后是调用方法:
package com.self.test;
import com.self.entity.LogSingleton;
/**
* @ClassName:EnumSigletonTest
* @description: TODO
* @author: shen_jian
* @date: 2021-03-19 10:00
**/
public class EnumSigletonTest {
public static void main(String[] args) {
for (int i = 0 ; i < 1000; i++){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(LogSingleton.LOG.add());
}
});
thread.start();
}
}
}
接下来是跑了多次的结果,我只贴出两次比对结果:
不说线程执行顺序,出现了两次相同的数字,所以是线程不安全的。
如果说的不对还请指出交流。