2016-06-23 2 views
0

Я хочу запустить сервер с загрузкой clojure, который должен продолжать работать. Поэтому я создал функцию -main, чтобы я мог запустить ./build.boot и выполнить основную функцию. В основной функции я запускаю поток без демона с идеей, что JVM продолжает работать, пока существует поток без демона. Однако сценарий загрузки останавливается, и мой сервер также останавливается. Что я делаю не так?Почему мой скрипт загрузки clojure перестает работать

#!/usr/bin/env boot 

(defn -main [& args] 
    (let [t (Thread. #(loop [] 
         (println (java.util.Date.)) 
         (Thread/sleep 500) 
         (recur)))] 
    (.setDaemon t false) 
    (.start t) 
    (Thread/sleep 3000) 
    (println "I have started a non-daemon thread, but still I exit???"))) 

Выход

#inst "2016-06-23T08:39:23.453-00:00" 
#inst "2016-06-23T08:39:24.005-00:00" 
#inst "2016-06-23T08:39:24.507-00:00" 
#inst "2016-06-23T08:39:25.009-00:00" 
#inst "2016-06-23T08:39:25.511-00:00" 
#inst "2016-06-23T08:39:26.013-00:00" 
I have started a non-daemon thread, but still I exit??? 

После чего заканчивается сценарий.

+0

Если ответ решить вашу проблему, вы должны принять Это. – nha

ответ

1

Я предполагаю, что загрузочные вызовы System/exit после выполнения задач (их вызов функции завершается).

Вы должны изменить вашу задачу join вашей породившей нити поэтому функция -main не завершена, пока ваш порождали поток не не закончило:

(.join t)

+0

Должно быть '(.join t)', спасибо – zetafish

+0

Да, извините. Я исправил это. –