如何立即停止Java中的线程
我正在创造一个游戏,它需要大量的声音来快速播放。每个声音都由一个声音类表示,如何立即停止Java中的线程,java,multithreading,audio,Java,Multithreading,Audio,我正在创造一个游戏,它需要大量的声音来快速播放。每个声音都由一个声音类表示,play()方法创建一个线程对象来异步修改剪辑,因为出于某种原因,Clip.stop()在一段时间后造成了明显的延迟。我的问题是,过了一段时间,所有这些线程都建立起来了,最终程序崩溃并出现OutOfMemoryError public void play() { Thread thread = new Thread() { public void run() {
play()
方法创建一个线程对象来异步修改剪辑,因为出于某种原因,Clip.stop()
在一段时间后造成了明显的延迟。我的问题是,过了一段时间,所有这些线程都建立起来了,最终程序崩溃并出现OutOfMemoryError
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播放器的指针都将非常感谢。您在线程中使用的是join()
,这没有任何意义<当线程不再处于活动状态时,code>Join方法返回。在您的情况下,当您在活动线程内调用join
方法时,它将永远不会返回。您考虑过一个新的方法吗?