繁体   English   中英

多线程不起作用。 什么不对?

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

您正在从一个线程访问另一个线程的那些变量,从而在主线程上给您0false

解:

使用volatile关键字从多个线程访问那些变量

样品:

private volatile int anInt = 0;
public volatile boolean signal = false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM