[英]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.