【问题标题】:I want to generate 5 random numbers using 5 Threads(each thread generates 1 number) and then to sum up the numbers and print the sum of them我想使用 5 个线程生成 5 个随机数(每个线程生成 1 个数字),然后将这些数字相加并打印它们的总和
【发布时间】:2018-01-14 11:32:49
【问题描述】:

这是我的类,它生成数字并添加数字 我得到一个随机数并在“求和”函数中添加返回它

public class summing implements Runnable
{ 
int a;
public summing(int a){
    this.a = a;
}

public void run()
{
    add(a);
}

public void add(int a)
{
    Random rand = new Random();
    int  n = rand.nextInt(10) + 1;
    System.out.println("nmber generated:" + n); 
    synchronized (this)
    {
        a += n;   
    }
}

这是我的主要课程 我正在制作 5 个线程,我想在这里添加随机数 sum 变量,但它不起作用。

public static void main(String[] args)
{
    int sum = 0;
    summing sum2 = new summing(sum);
    Thread t1 = new Thread(sum2);
    Thread t2 = new Thread(sum2);
    Thread t3 = new Thread(sum2);
    Thread t4 = new Thread(sum2);
    Thread t5 = new Thread(sum2);
    t1.start();
    t2.start();
    t3.start();
    t4.start();
    t5.start();
    }

【问题讨论】:

  • Java 是按值传递的。为参数分配新值不会修改原始变量。
  • @JBNizet 这是我在学校上课的练习...我不太了解线程(特别是同步的)我真的不明白如何在我的主(总和)中添加一个变量线程中生成的数字
  • 这与线程无关。如果你有一个方法void increment(a) { a++; },并称它为increment(i),那么i 的值不会改变。因为Java是按值传递的。 i 的副本被传递给 increment()。

标签: java multithreading random sum


【解决方案1】:

试试这个

public class Summing implements Runnable {

    int a;

    public Summing(int a) {
        this.a = a;
    }

    public void run() {
        addRondom();
    }

    public void addRondom() {
        Random rand = new Random();
        int n = rand.nextInt(10) + 1;
        System.out.println("number generated: " + n);
        synchronized (this) {
            a += n;
        }
    }
}

然后

public static void main(String[] args) {
    int base = 0;

    Summing sum2 = new Summing(base);

    Thread t1 = new Thread(sum2);
    Thread t2 = new Thread(sum2);
    Thread t3 = new Thread(sum2);
    Thread t4 = new Thread(sum2);
    Thread t5 = new Thread(sum2);

    t1.start();
    t2.start();
    t3.start();
    t4.start();
    t5.start();

    try {
        t1.join();
        t2.join();
        t3.join();
        t4.join();
        t5.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.print("final result: " + sum2.a);
}

效果很好

number generated: 1
number generated: 3
number generated: 7
number generated: 4
number generated: 5
final result: 20
Process finished with exit code 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多