[英]Multithreading doesn't work. What is incorrect?
这是一个旨在研究多线程的小程序。 我希望运行后在main方法中获得不同的随机数。 大约每秒4个数字。 但是我有成千上万的零。 哪里有错误?
主类:
public class Main {
public static void main(String[] args) {
ExternalWorld externalWorld = new ExternalWorld();
externalWorld.start();
int x = 0;
while (true) {
while(!externalWorld.signal){
System.out.println("qqq");}
System.out.println(++x + ") " + externalWorld.getAnInt());
}
}
}
外部世界类:
import java.util.Random;
public class ExternalWorld extends Thread {
private int anInt = 0;
public boolean signal = false;
@Override
public void run() {
Random random = new Random(100);
while(true) {
anInt = random.nextInt(100);
signal = true;
try {
Thread.sleep(200);
signal = false;
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public int getAnInt() {
if (!signal) {
int p = 1 / 0;
}
int result = anInt;
anInt = 0;
return result;
}
}
问题:
private int anInt = 0;
public boolean signal = false;
您正在从一个线程访问另一个线程的那些变量,从而在主线程上给您0
和false
解:
使用volatile
关键字从多个线程访问那些变量
样品:
private volatile int anInt = 0;
public volatile boolean signal = false;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.