【发布时间】:2014-08-08 08:36:32
【问题描述】:
我有一个类,在某个字段上有一个 getter getInt() 和一个 setter setInt(),比如字段
Integer Int;
一个类的对象,比如SomeClass。
这里的setInt() 是同步的——getInt() 不是。
我正在从多个线程中更新Int 的值。
每个线程都在获取值Int,并进行适当的设置。
线程不以任何方式共享任何其他资源。
每个线程中执行的代码如下。
public void update(SomeClass c) {
while (<condition-1>) // the conditions here and the calculation of
// k below dont have anything to do
// with the members of c
if (<condition-2>) {
// calculate k here
synchronized (c) {
c.setInt(c.getInt()+k);
// System.out.println("in "+this.toString());
}
}
}
run() 方法只是在通过传递给它的参数从构造函数中更新的成员上调用上述方法:
public void run() { update(c); }
当我在大序列上运行它时,线程并没有太多交错——我看到一个线程执行了很长时间,而没有任何其他线程在其间运行。
必须有更好的方法来做到这一点。
我无法更改SomeClass 或调用线程的类的内部结构。
如何才能做得更好?
TIA。
//======================================
编辑:
我不是在操纵线程的执行顺序。它们都有相同的优先级。只是我在结果中看到的表明线程没有均匀地共享执行时间——其中一个一旦接管,就会继续执行。但是,我不明白为什么这段代码应该这样做。
【问题讨论】:
-
您能否展示一下您的 public void run() 方法的代码?如果您粘贴与线程相关的整个代码,例如如何创建多个线程以及如何启动它们,那就更好了。我怀疑您的代码中是否真的实现了多线程。
-
请查看更新后的代码
-
你在同一个类中有 update() 和 run() 方法吗?
-
是的,他们在同一个班级
-
您想知道如何克服其他线程可能出现的饥饿问题吗?如果是这样,我建议在问题的某个地方添加饥饿,因为这是一个已知问题。
标签: java multithreading time