我有一门课,它基本上两次执行相同的一系列步骤。听起来像是在哪里多线程你的程序的一个完美的例子。我的问题是,如果我只能用两个线程来做到这一点。这是事情的一般概要
Tester implements Runnable{
Thread obj1Thread, obj2Thread;
MyObj obj1, obj2;
String obj1Results, obj2Results;
void runTests(){
obj1Thread = new Thread(this, "ob1 thread");
obj2Thread = new Thread(this, "ob2 thread");
obj1.start();//builds up obj1
obj2.start();//builds up obj2
if(obj1 and obj2 are finished building){
System.out.println(obj1);
System.out.println(obj2);
}
obj1Thread.startSecondPhase()//runs a separate function that tests obj1 vs ob2. Essentially test(ob1, ob2)
obj2Thread.startSecondPhase()//runs a separate function that tests obj2 vs ob1. Essentially test(ob2, ob1)
if(obj1 and obj2 are finished testing){
System.out.println(obj1Results);
System.out.println(obj2Results);
}
}
}
我已经完成了第一部分 - 构建对象 - 工作。我现在的问题是——
- 如何让主线程等待两个线程完成它们的第一部分?也许主
wait
线程会对两个对象都执行一次,然后在线程之后notifyAll
他们在主线程上等待?但是线程如何获取主线程呢?也许与this
? - 如何在不使用新线程和新的特定运行函数创建新类的情况下获得运行函数的“第二阶段”?我不想为每一项小任务都开设一个新课程和一切。
为了澄清我特别想要的事件顺序是 -
- 主线程初始化并启动两个线程
- 两个线程同时构建各自的对象
- 当两个线程都完成构建时,它们会暂停。然后主线程按顺序打印出对象。
- 主线程完成后,两个线程同时将代码继续到测试阶段
- 当线程完成后,主线程将结果打印出来。可能可以在
join()
这里使用
编辑:另外,我如何告诉特定线程我希望它们处理哪些对象?现在我正在以一种 hacky 的方式进行操作(我正在处理线程名称)。