Pun*_*nit 0 java multithreading volatile
我试图理解volatile变量的工作.我创建了一个简单的类"A",它扩展了"Thread"并具有一个volatile变量"i".还有另一个类"Amain"运行3个"A"类线程.我在A的run()中运行一个循环,它取决于这个volatile变量.这里的代码.
// Thread
public class A extends Thread {
public volatile int i = 0;
@Override
public void run() {
while(i<10)
System.out.println(i++ + " " + this.getName());
}
}
// Main Class
public class Amain {
public static void main(String[] args) {
A t1 = new A();
A t2 = new A();
A t3 = new A();
t1.start();
t2.start();
t3.start();
}
}
Run Code Online (Sandbox Code Playgroud)
如果在所有线程之间共享易失性值,那么"i"应该被打印10次.相反,它为每个线程打印10个值,即总共30个值.需要在此代码的上下文中理解volatile的工作.另外,我还可以从任意数量的线程中获取i的10个值(在此代码的上下文中).
在您的情况下,您创建了三个单独的A对象,每个对象都有其单独的i字段,因此这里没有共享状态.如果要共享变量,请将其声明为static:
public static volatile int i = 0;
Run Code Online (Sandbox Code Playgroud)
请注意,即使变量是易变的,增量也是不安全的.请AtomicInteger改用.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |