3
我正在創建一個需要大量聲音才能快速播放的遊戲。每個聲音都由一個Sound類表示,其中的play()
方法創建一個Thread對象以異步修改該剪輯,因爲某種原因clip.stop()
在一段時間後引起了明顯的延遲。我的問題是,過了一段時間,所有這些線程建立起來,最終程序崩潰與OutOfMemoryError。如何在Java中立即停止線程
public void play()
{
Thread thread = new Thread()
{
public void run()
{
if (clip.isRunning()) clip.stop();
clip.setFramePosition(0);
if (isAmbient) clip.loop(Clip.LOOP_CONTINUOUSLY);
else clip.start();
try
{
Thread.sleep(clip.getMicrosecondLength()/1000);
join();
}
catch (InterruptedException ie)
{
ie.printStackTrace();
}
}
};
thread.setDaemon(true);
thread.start();
}
我試圖尋找其他地方的這個問題的答案,但我創建的線程不會循環;他們只需要執行一次然後立即死亡。如果我不使用這些線程,就像我之前所說的那樣,連續播放相同的聲音會在一段時間後顯着延遲。我不太確定這個聲音引擎,所以任何指向一個可以暫停和可恢復的wav播放器的指針都會被讚賞。
你考慮過[Thread Pool](https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html)嗎? – OldCurmudgeon