Ваша программа является примером многопоточного кодирования. Команда clip.start()
запускает новый, одновременно работающий поток, а затем без паузы переходит к следующей строке кода. Затем ваш поток устанавливает флаг l oop и завершает работу.
Между тем, параллельный поток "play" выполняется. Но эта ветка получила статус «демон». Обычные потоки будут поддерживать выполнение программы до тех пор, пока они не будут завершены, но потоки статуса «демона» позволят себе останавливаться, если нет обычных живых потоков. Итак, когда «основной» поток завершен, поток воспроизведения звука также завершается.
Информация API о потоках .
Когда Clip
запускает новый поток с помощью метода start()
, потоку автоматически присваивается статус daemon
.
Однако меня сбивает с толку то, что я не могу найти любую документацию API о состоянии нового потока запущен Clip
. Об этом также нет упоминания в учебнике Oracle Воспроизведение аудио . Так что вас и бесчисленное множество других людей, впервые использующих объект Clip
, вряд ли можно обвинить в том, что вы были озадачены, когда это происходит.