在我的spring项目中,在context.xml
中,我定义了一个bean,我将其称为init方法,该方法创建一个静态的对象leaderSelector
。
init() {
leaderSelector= new customObject();
leaderSelector.start();
}
leaderSelector.start()
将对象的属性hasLeadership
修改为true
。
只要服务器启动,就会调用上面的init方法。
我还有一个任务调度程序,它在同一个类callJobs()
中调用一个不同的方法,在那里我访问对象leaderSelector
的属性hasLeaderShip
{{1} }}
false
1。)callJobs() {
if(leaderSelector.hasLeaderShip()) {
//do some important stuff
}
}
首先运行,并在一个线程中将对象init()
的{{1}}属性设置为hasLeaderShip
。
2.)任务调度程序之后(在不同的线程中)调用leaderSelector
,当它访问对象true
的{{1}}属性时,它是{{1 }}
对象callJobs()
是静态的。但是创建了它的两个不同实例。我应该如何摆脱这个问题。
完成计划
leaderSelector
答案 0 :(得分:0)
尝试
1)同步对修改hasLeadership
的方法的访问2)将leaderSelector转换为Singleton类。请参阅:http://www.javaworld.com/article/2073352/core-java/simply-singleton.html
答案 1 :(得分:0)
线程之间没有内存同步,因此JVM无法跟踪分配。创建变量volatile
。