Java 当我使用volatile和AtomicInteger时,实践发现输出应该有代码的输出消失

Java 当我使用volatile和AtomicInteger时,实践发现输出应该有代码的输出消失,java,volatile,atomicinteger,Java,Volatile,Atomicinteger,当我使用volatile和AtomicInteger实践发现输出应该有代码消失的输出时,我希望有人能帮我解决这个问题 它应该有输出,但输出消失了,代码如下: package volatil; import java.util.concurrent.atomic.AtomicInteger; public class Count extends Thread { // private static volatile AtomicInteger key =new AtomicInteger

当我使用volatile和AtomicInteger实践发现输出应该有代码消失的输出时,我希望有人能帮我解决这个问题

它应该有输出,但输出消失了,代码如下:

package volatil;

import java.util.concurrent.atomic.AtomicInteger;

public class Count extends Thread {

  // private static volatile AtomicInteger key =new AtomicInteger(0);
  private static AtomicInteger key = new AtomicInteger(1);

  private static void add() {
    for (int i = 0; i < 1000; i++) {
      key.incrementAndGet();
    }
    System.out.println("now key is " + key);
  }

  @Override
  public void run() {
    add();
  }

  public static void main(String[] args) {
    Count[] counts = new Count[10];
    for (int i = 0; i < 10; i++) {
      counts[i] = new Count();
    }
    for (int i = 10; i < 10; i++) {
      counts[i].start();
    }
  }
}
package volatil;

public class Count extends Thread {

    private static volatile int key;

    private static void add() {
        for (int i = 0; i < 1000; i++) {
            key++;
        }
        System.out.println("now key is " + key);
    }

    @Override
    public void run() {
        add();
    }

    public static void main(String[] args) {
        Count[] counts = new Count[10];
        for (int i = 0; i < 10; i++) {
            counts[i] = new Count();
        }
        for (int i = 10; i < 10; i++) {
            counts[i].start();
        }
    }
}
包装挥发物;
导入java.util.concurrent.AtomicInteger;
公共类计数扩展线程{
//私有静态volatile AtomicInteger密钥=新的AtomicInteger(0);
私有静态AtomicInteger密钥=新的AtomicInteger(1);
私有静态void add(){
对于(int i=0;i<1000;i++){
key.incrementAndGet();
}
System.out.println(“现在的键是”+键);
}
@凌驾
公开募捐{
添加();
}
公共静态void main(字符串[]args){
计数[]计数=新计数[10];
对于(int i=0;i<10;i++){
计数[i]=新计数();
}
for(int i=10;i<10;i++){
计数[i]。开始();
}
}
}
此代码相同,代码如下:

package volatil;

import java.util.concurrent.atomic.AtomicInteger;

public class Count extends Thread {

  // private static volatile AtomicInteger key =new AtomicInteger(0);
  private static AtomicInteger key = new AtomicInteger(1);

  private static void add() {
    for (int i = 0; i < 1000; i++) {
      key.incrementAndGet();
    }
    System.out.println("now key is " + key);
  }

  @Override
  public void run() {
    add();
  }

  public static void main(String[] args) {
    Count[] counts = new Count[10];
    for (int i = 0; i < 10; i++) {
      counts[i] = new Count();
    }
    for (int i = 10; i < 10; i++) {
      counts[i].start();
    }
  }
}
package volatil;

public class Count extends Thread {

    private static volatile int key;

    private static void add() {
        for (int i = 0; i < 1000; i++) {
            key++;
        }
        System.out.println("now key is " + key);
    }

    @Override
    public void run() {
        add();
    }

    public static void main(String[] args) {
        Count[] counts = new Count[10];
        for (int i = 0; i < 10; i++) {
            counts[i] = new Count();
        }
        for (int i = 10; i < 10; i++) {
            counts[i].start();
        }
    }
}
包装挥发物;
公共类计数扩展线程{
私有静态易失性int密钥;
私有静态void add(){
对于(int i=0;i<1000;i++){
key++;
}
System.out.println(“现在的键是”+键);
}
@凌驾
公开募捐{
添加();
}
公共静态void main(字符串[]args){
计数[]计数=新计数[10];
对于(int i=0;i<10;i++){
计数[i]=新计数();
}
for(int i=10;i<10;i++){
计数[i]。开始();
}
}
}

for循环中的值错误。这:

for (int i = 10; i < 10; i++)
for(int i=10;i<10;i++)
应该是:

for (int i = 0; i < 10; i++)
for(int i=0;i<10;i++)