簡體   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