【问题标题】:How to run different Methods of same class in different threads?如何在不同线程中运行同一类的不同方法?
【发布时间】:2019-10-31 21:54:01
【问题描述】:

我正在尝试了解如何在 java 中实现线程。
现在我知道你可以使用接口runnable和run方法来实现线程。

但是如果我想拥有同一个类的两个不同线程,它们运行这个类的不同方法呢?我只能重写一次 run 方法,所以我是否必须区分例如线程的名称才能运行正确的方法?

public class PrintState {
    private int state = 0;

    public synchronized void printNewState() throws InterruptedException {
        wait();
        System.out.println(state);
    }

    public synchronized void setValue(int v) {
        state = v;
        notify();
        System.out.println("value set");
    }
}

我希望有两个线程同时运行 printNewState() 和 setValue(12) 方法,每个线程都在不同的线程中。
如何实现run() 方法和主方法中的线程以实现此目的?
后面的结果应该是:
value set
12

【问题讨论】:

    标签: java multithreading synchronization


    【解决方案1】:

    但是如果我想拥有同一个类的两个不同线程,它们运行这个类的不同方法呢?我只能重写一次 run 方法,所以我是否必须区分例如线程的名称才能运行正确的方法?

    您需要区分执行线程和正在执行的代码。您可以有一个Runnable 和一个run(),并有1000 个线程执行Runnable。这意味着您有 1000 个线程执行相同的代码,尽管您可能只有一个 Runnable 实例供所有线程使用。

    我希望有两个线程同时运行 printNewState() 和 setValue(12) 方法,每个线程都在不同的线程中。

    你可以做这样的事情。注意我使用 lambdas 来创建 Runnables:

    PrintState ps = new ...
    Thread t1 = new Thread(ps::printNewState); //t1 will call printNewState
    Thread t2 = new Thread(() -> ps.setValue(12)); //t2 will call setValue(12)
    t1.start();
    t2.start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多