Делать две вещи в точно в одно и то же время ... сложно.В однопоточной среде ОС необходимо переключаться между потоками, чтобы имитировать их одновременную работу.Таким образом, чтобы иметь возможность запускать их в одно и то же время, вам нужно запустить два потока и подождать, пока они достигнут точки, где они должны быть синхронизированы, а затем дать обоим потокам возможность продолжить.* Другим решением было бы объединить два звуковых потока так, чтобы звучало так, как будто два звука воспроизводятся, когда он на самом деле один.Хотя я не настолько опытен в манипулировании звуком, и определенно не на Android ...
Первым решением было бы создать два потока, запустить их оба, а затем использовать wait()
и * 1008.* чтобы они вызывали 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-кодированием в последнее время ..: - (