我试图了解如何在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
但是如果我想拥有同一类的两个不同线程,这些线程运行该类的不同方法,该怎么办?我只能重写一次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();