Mar*_* G. 1 java multithreading java-threads
我有变量,我想在线程之间共享,但他们给我一些问题!我有一个Integer,我希望主程序与它正在创建的线程共享,并允许线程更改其值并被其他线程和主程序看到(我有两种不同类型的线程,我想创建不止一个).我已经考虑了关键部分.这是我的计划的一部分:
public static void main(String[] args) throws InterruptedException{
Integer t = 0; //What do I change here?
(new Te(t)).start();
(new In(t)).start();
}
Run Code Online (Sandbox Code Playgroud)
我没有编写我的所有程序,但在这种情况下,感兴趣的变量是t,它将由Threads更改,并且主要程序必须看到它的新的有价值,以防它创建新的线程和线程时它们想要读/写.
如果不清楚这些,我可以发布更多的代码,如果需要的话!
非常感谢你提前:)
整数是不可变的.因此,您的线程之间永远不会反映出更改.
或者,您可以将其包装Integer在共享对象中,并提供线程安全方法来访问/更改包装Integer值.
客户端看起来像:
public static void main(String[] args) throws InterruptedException{
ThreadSafeInteger o = new ThreadSafeInteger();
new Te(o).start();
new In(o).start();
}
Run Code Online (Sandbox Code Playgroud)
或者更简单地使用AtomicInteger它来解决需求,因为它包装了一个int,并且它还确保了int值的原子更新.
客户端看起来像:
public static void main(String[] args) throws InterruptedException{
AtomicInteger o = new AtomicInteger();
new Te(o).start();
new In(o).start();
}
Run Code Online (Sandbox Code Playgroud)