2 つのことを同時に行うのは難しい.. 1 つのスレッド環境では、OS はスレッド間をジャンプして、同時に実行されているスレッドをシミュレートする必要があります。したがって、それらを「同時に」実行できるようにするには、2 つのスレッドを開始し、それらが同期されるべきポイントに到達するのを待ってから、両方のスレッドが続行されるようにする必要があります。
もう 1 つの解決策は、2 つのサウンド ストリームをマージして、実際には 1 つのサウンドが再生されているときに 2 つのサウンドが再生されているように聞こえるようにすることです。私は音の操作が得意ではありませんが、Android ではありません...
最初の解決策は、2 つのスレッドを生成し、両方を開始してから、 and を使用してwait()
、おそらくLockクラスを使用して同時にnotify()
呼び出すことです。MediaPlayer.start()
さて、2 つのスレッドを同期する方法の長い例 (ここの例に基づくと:
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 コーディングを行っていません.. :-(