gpt4 book ai didi

java - 如何同时(或关闭时间)启动两个线程

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:06 25 4
gpt4 key购买 nike

我有一个类 Note 和一个类 MeetingNote 类中有一个名为noteListArrayList。当 Meeting 的对象被创建时,它会被注册到 noteList 中。

我只是想在主类中演示Meeting 的两个对象可以同时创建(或在关闭时间)。我的程序是:

public class Note{
//some field and method hier
public void add(Meeting m){
notes.add(m);
}
private static final List<Entry> notes =
Collections.synchronizedList(new ArrayList<Entry>());
}

public class Meeting implements Runnable{
public Meeting(Note note_1,Note note_2,Calendar calendar){
note_1.add(this);
note_2.add(this);}
//some method
}

public class Test implements Runnable{
public static void main(String[] args) {
Note note_1 = new Note();
Note note_2 = new Note();
Meeting m_1 = new Meeting(note_1,note_2);
Meeting m_2 = new Meeting(note_2,note_1)
Thread t1 = new Thread(m_1);
Thread t2 = new Thread(m_2)
t1.start();
t2.start();
}
//t1,t2 are two thread and they start one to one(not at the same time).

我在任何地方都读到可以使用 wait()notify()notifyAll(),但它们必须在一个同步方法。我的程序中没有同步方法。

最佳答案

这与您即将开始这两个线程的时间差不多。

为了进一步同步运行方法,您可以做的是让它们在 CountDownLatch 上等待在他们的运行方法之上。

这样做是为了消除创建和启动线程的开销(在执行 run 方法之前发生的部分),并且可能还消除了一些奇怪的调度问题。但是,您无法保证闩锁之后的代码实际执行的并发程度。

CountDownLatch latch = new CountDownLatch(2);

Runnable r1 = new Meeting(latch);
Runnable r2 = new Meeting(latch);


// in Meeting

private final CountDownLatch latch;

public void run(){

latch.countDown();
latch.await();

// other code
}

关于java - 如何同时(或关闭时间)启动两个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676244/

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