好吧,最近我特么是跟高并发杠上了。。
单例模式想必很很常见,而往往单例模式跟static相关。单例模式的初衷是为了在任何条件下我只得到一个实例,包括类和变量。而往往需要我们用static关键字去修饰达到单例的效果。最近高并发接触得比较多,使用缓存就需要用单例。因为你针对某一个key的缓存只可能定义成“一份”。所以缓存类的实例需要用到单例模式。但是在高并发的条件下,控制不好的话,很容易出问题。下面写个小例子,就能看出是什么问题了……
@Controller
public class TestAction {
@RequestMapping("/test/context.json")
@ResponseBody
public void test() {
Thread t = Thread.currentThread();
new Thread(new TestThread("count")).start();
try {
t.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new TestThread("count")).start();
}
}
class TestThread implements Runnable{
private String attr;
public