我想在线程之间共享变量,但它们给我带来了一些问题!我有一个整数,我希望主程序与它正在创建的线程共享并允许线程更改其值并被其他线程和主程序看到(我有两种不同类型的线程,我想创建每一种以上)。我已经考虑了临界区。这是我的程序的一部分:
public static void main(String[] args) throws InterruptedException{
Integer t = 0; //What do I change here?
(new Te(t)).start();
(new In(t)).start();
}
我还没有编写我所有的程序,但在这种情况下,感兴趣的变量是 t,它将被 Threads 更改,并且主程序必须看到它的新值,以防它创建一个新线程,并且当它们创建新线程时由线程看到想读/写。
如果这些还不清楚,如果需要,我可以发布更多代码!
非常感谢您提前:)
整数是不可变的。因此更改永远不会反映在您的线程之间。
作为替代方案,您可以将 包装Integer
在共享对象中并提供线程安全方法来访问/更改包装的Integer
值。
客户端可能看起来像:
public static void main(String[] args) throws InterruptedException{
ThreadSafeInteger o = new ThreadSafeInteger();
new Te(o).start();
new In(o).start();
}
或者更简单地使用AtomicInteger
它来解决需求,因为它包装了一个int
,此外它还确保了int
值的原子更新。
客户端可能看起来像:
public static void main(String[] args) throws InterruptedException{
AtomicInteger o = new AtomicInteger();
new Te(o).start();
new In(o).start();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句