如何解决两个线程和两个静态变量场景的实例?

时间:2015-04-15 16:04:41

标签: java multithreading spring concurrency thread-safety

在我的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

2 个答案:

答案 0 :(得分:0)

尝试

1)同步对修改hasLeadership

的方法的访问

2)将leaderSelector转换为Singleton类。请参阅:http://www.javaworld.com/article/2073352/core-java/simply-singleton.html

答案 1 :(得分:0)

线程之间没有内存同步,因此JVM无法跟踪分配。创建变量volatile