同时做两件事是..困难的。在单线程环境中,操作系统需要在线程之间跳转以模拟它们同时运行。因此,为了能够“同时”运行它们,您需要启动两个线程并等待它们到达它们应该同步的点,然后让两个线程现在它们应该继续。
另一种解决方案是合并两个声音流,这样听起来就像是两个声音在播放,而实际上是一个声音。尽管我对声音处理不是那么精通,而且绝对不是在 Android 上...
第一个解决方案是生成两个线程,同时启动它们,然后使用wait()
andnotify()
让它们同时调用MediaPlayer.start()
,可能使用Lock类。
好的,这是一个关于如何同步两个线程的长示例(基于此处的示例:
import java.util.concurrent.locks.*;
class SynchronizeTest implements Runnable {
public static void main(String[] args) {
final ReentrantLock lock = new ReentrantLock();
final Condition cond = lock.newCondition();
new Thread(new SynchronizeTest(1, lock, cond)).start();
new Thread(new SynchronizeTest(2, lock, cond)).start();
}
private final int number;
private final ReentrantLock lock;
private final Condition cond;
public SynchronizeTest(int number, ReentrantLock lock, Condition cond) {
this.number = number;
this.lock = lock;
this.cond = cond;
}
public void run() {
try {
if (number == 1) {
put();
}
else {
take();
}
}
catch (InterruptedException ie) { }
}
public void put() throws InterruptedException {
lock.lock();
try {
cond.await();
} finally {
lock.unlock();
}
System.out.println(number);
}
public void take() throws InterruptedException {
lock.lock();
// wait for put to take the lock
Thread.sleep(300);
try {
cond.signal();
} finally {
lock.unlock();
}
System.out.println(number);
}
}
这可能编码得更简单,但我最近没有做过那么多 Java 编码.. :-(