java - 简单的java线程测试程序不起作用

标签 java multithreading concurrency

我正在尝试用 Java 制作一个极其简单的“计算器”来理解线程,因为它是我为 Java 中的并发编程场景找到的实现。

它在我的类里面的呈现方式如下:

cobegin
  a = a + 10
  b = b - 3
coend
c = b - a
w = c + 1

我做了一些研究,并尝试在 java 中以这种方式实现它,但它对所有值返回 0。

主类 公共(public)类线程{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int a = 0;
        int b = 0;
        Threader t1 = new Threader(a, '+', 10); 
        System.out.println("a" + a);
        Threader t2 = new Threader(b, '-', 3);
        System.out.println("b" + b);
        t1.start();
        a = t1.res;
        System.out.println("a>>thread" + a);
        t2.start();
        b = t2.res;
        System.out.println("b>>thread" +b);
        int c = b - a;
        System.out.println("c" + c);
        int w = c + 1;
        System.out.println("w" +c);

    }

应该执行线程的类

public class Threader extends Thread {

    private char op;
    private int a;
    private int b;
    public int res;

    public Threader(int _a, char _op, int _b) {
        a = _a;
        b = _b;
        op = _op;
    }

    @Override
    public void run() {
        Operator ope = new Operator();
        res = ope.operar(a, op, b);
    }
}

操作符类

public class Operator {

    public int operar(int a, char op, int b) {
        if (op == '+') {
            return sum(a, b);
        }
        if (op == '-') {
            return substr(a, b);
        }
        if (op == '*') {
            return mult(a, b);
        }
        if (op == '/') {
            return div(a, b);
        } else {
            return Integer.MAX_VALUE;
        }
    }

    public int sum(int a, int b) {
        return a + b;
    }

    public int substr(int a, int b) {
        return a - b;
    }

    public int mult(int a, int b) {
        return a * b;
    }

    public int div(int a, int b) {
        if (b > 0) {
            return a / b;
        } else {
            return Integer.MAX_VALUE;
        }
    }
}

我错过了什么? Java 中是否有更好的方法来解决该问题?

最佳答案

IMO,这是如何使用线程的一个糟糕示例。

关于任何线程,我总是问的第一个问题是“它等待什么?”这几乎就是任何线程的定义。服务器线程等待来自客户端的传入连接,客户端线程等待特定客户端发送下一个命令,GUI 线程等待键盘和鼠标输入,工作线程等待执行任务等。

您的线程不会等待任何事情。 (顺便说一句,您的程序中存在错误:您的主线程甚至不等待工作人员计算结果。)

您的程序是一个不寻常的异常(exception)规则的退化示例:它是一个执行单个计算的程序。在这种情况下,创建不必等待的工作线程是有意义的,因为每个线程从创建的那一刻起就知道其任务。程序创建线程,线程执行其任务,主线程等待各个结果,将它们组合起来,然后程序就完成了。

但这是一个不寻常的案例。

更典型的是,计算密集型程序将使用工作线程来执行许多计算。并且,这些工作线程在不主动计算时等待下一项工作。而且,这就是它们的定义。

如果您想学习如何思考线程,请考虑它们等待什么。

国际海事组织。

关于java - 简单的java线程测试程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32489973/

相关文章:

javascript - 想要显示选择的重复排名以及使用 javascript/jquery 重复的排名

java - Hamcrest Matchers - 断言列表类型

java - 所有 ExecutorService 任务完成后程序不会立即终止

java - 用于测试多线程 Java 应用程序的确定性记录/重放框架

java - 如何在 java 中使用 apache math 3.0 为直方图生成 bins?

java - 安卓应用架构 : Implements user permission in lifecycle

c# - 任务和异常静默

java - 并发迭代和线程安全

ios - 线程和 isExecuting 变量

使用即发即忘 Futures 进行 Scala 测试