gpt4 book ai didi

java - 基本的多线程程序

转载 作者:行者123 更新时间:2023-12-03 12:59:30 24 4
gpt4 key购买 nike

以下代码应该从用户那里获取两个整数(每个输入一个线程),将它们相加(使用第三个线程)并打印总和。
但是程序在第一个线程之后终止。

import java.util.Scanner;

public class T1 {

public static void main(String args[]) {
num1 oo = new num1();
num2 t1 = new num2();

add s = new add();

int flag = 0;
if(oo.flag == 0 && flag == 0) {
oo.start();
flag = 1;
}

if(oo.flag == 1 && flag == 1)
t1.start();

if(oo.flag == 1 && t1.flag2 == 1)
s.start();

}

}

class num1 extends Thread //implements Runnable
{
int n1,flag = 0;
Scanner obj = new Scanner(System.in);

public void run() {
System.out.println("enter first no");
n1 = obj.nextInt();
flag = 1;

System.out.print("In num1 and flag is " + flag + "\n");
}

}

class num2 extends Thread {
int n2,flag2 = 0;
Scanner obj = new Scanner(System.in);

public void run() {
System.out.println("enter second no");
n2 = obj.nextInt();
flag2 = 1;
System.out.print("In num2 and flag is " + flag2 + "\n");
}

}

class add extends Thread {
public void run() {
num1 o = new num1();
num2 t = new num2();

System.out.print("The sum is " + (o.n1 + t.n2) + "\n");
}

}

输出给出:
enter first no
5
In num1 and flag is 1

最佳答案

您提供的代码存在以下问题:

  • 通过System.in类引用/打开Scanner的多个实例。由于一个对象(System.in)在多个线程中使用,因此产生了问题。
  • add.run()中,创建了num1num2线程的实例,但从未启动。
  • 线程不是使用join()连接的,因此如果public static void main(String args[])被终止,那么线程也将被终止。还应在合并num1 onum12 t值之前将线程o.n1t.n2连接起来,以便可以正确读取各个值。
  • public static void main(String args[])中,创建了num1 oonum2 t1。但是它的值不能用于run()类的add方法中求和。因此,这在逻辑上是不正确的。

  • 以下是更正的代码(出于优化原因,删除了未使用的变量):
    import java.util.Scanner;

    class T1
    {
    public static Scanner obj = new Scanner(System.in);
    public static void main(String args[]) {
    add s = new add();
    try{
    s.start();
    s.join();
    }catch(Exception ex){}
    }
    }

    class num1 extends Thread {
    int n1;
    public void run() {
    System.out.println("enter first no");
    n1 = T1.obj.nextInt();
    System.out.print("In num1 is " + n1 + "\n");
    }
    }

    class num2 extends Thread {
    int n2;
    public void run() {
    System.out.println("enter second no");
    n2 = T1.obj.nextInt();
    System.out.print("In num2 is " + n2 + "\n");
    }
    }

    class add extends Thread {
    public void run() {
    num1 o = new num1();
    num2 t = new num2();
    o.start();
    t.start();
    try {
    o.join();
    t.join();
    }catch(Exception ex){}

    System.out.print("The sum is " + (o.n1 + t.n2) + "\n");
    }
    }

    关于java - 基本的多线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852618/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com