【发布时间】:2016-05-11 18:38:39
【问题描述】:
我有一个像这样的单例类:
private static StringsHandler INSTANCE = null;
private int count = 0;
//I have 2 methods so I don't have to be sending/checking nulls on getInstance
//once it's created
public static void createInstance(List<String> strings){
if(StringsHandler.INSTANCE == null)
StringsHandler.INSTANCE = new StringsHandler(strings);
}
public static StringsHandler getInstance(){
return StringsHandler.INSTANCE;
}
public synchronized File use(){
count++;
System.out.println("threads using .use " + count);
while(true){} //Keep the thread here so count should stay as 1
}
在应用主类上创建实例,main方法如下:
if(stringList.isEmpty()){
LOGGER.error("List was empty");
System.exit(0);
}
StringsHandler.createInstance(stringList);
我这样称呼它:
list.parallelStream().forEach(element -> {
SingletonClass.getInstance().use();
});
这应该打印threads using .use 1,但它打印threads using .use 5 为什么同步关键字允许超过1个线程?
【问题讨论】:
-
你有多个对象吗?
-
这个怎么称呼?
-
编辑回答您的问题
-
MCVE 意味着我们应该能够复制代码并将其粘贴到文件中,然后编译并运行它。由于这不是 MCVE,因此投票关闭。
标签: java multithreading java-8 synchronized java-threads