如何在不同的线程中运行同一类的不同方法?

问题描述 投票:0回答:1

我试图了解如何在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 set12

java multithreading synchronization
1个回答
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();
© www.soinside.com 2019 - 2024. All rights reserved.