Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何立即停止Java中的线程_Java_Multithreading_Audio - Fatal编程技术网

如何立即停止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
方法时,它将永远不会返回。

您考虑过一个新的方法吗?