Skip to content

Commit af3a1f0

Browse files
committed
Add daemon thread factory for SingleThreadExecutor
1 parent 9800707 commit af3a1f0

File tree

3 files changed

+21
-17
lines changed

3 files changed

+21
-17
lines changed

lib/concurrent-ruby/concurrent/executor/java_executor_service.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,21 @@ def run
8181
end
8282
private_constant :Job
8383
end
84+
85+
class DaemonThreadFactory
86+
# hide include from YARD
87+
send :include, java.util.concurrent.ThreadFactory
88+
89+
def initialize(daemonize = true)
90+
@daemonize = daemonize
91+
end
92+
93+
def newThread(runnable)
94+
thread = java.util.concurrent.Executors.defaultThreadFactory().newThread(runnable)
95+
thread.setDaemon(@daemonize)
96+
return thread
97+
end
98+
end
99+
84100
end
85101
end

lib/concurrent-ruby/concurrent/executor/java_single_thread_executor.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ def initialize(opts = {})
1919
private
2020

2121
def ns_initialize(opts)
22-
@executor = java.util.concurrent.Executors.newSingleThreadExecutor
22+
@executor = java.util.concurrent.Executors.newSingleThreadExecutor(
23+
DaemonThreadFactory.new(ns_auto_terminate?)
24+
)
2325
@fallback_policy = opts.fetch(:fallback_policy, :discard)
2426
raise ArgumentError.new("#{@fallback_policy} is not a valid fallback policy") unless FALLBACK_POLICY_CLASSES.keys.include?(@fallback_policy)
2527
end

lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ def ns_initialize(opts)
108108
queue = java.util.concurrent.LinkedBlockingQueue.new(@max_queue)
109109
end
110110

111+
self.auto_terminate = opts.fetch(:auto_terminate, true)
112+
111113
@executor = java.util.concurrent.ThreadPoolExecutor.new(
112114
min_length,
113115
max_length,
@@ -120,21 +122,5 @@ def ns_initialize(opts)
120122
end
121123
end
122124

123-
class DaemonThreadFactory
124-
# hide include from YARD
125-
send :include, java.util.concurrent.ThreadFactory
126-
127-
def initialize(daemonize = true)
128-
@daemonize = daemonize
129-
end
130-
131-
def newThread(runnable)
132-
thread = java.util.concurrent.Executors.defaultThreadFactory().newThread(runnable)
133-
thread.setDaemon(@daemonize)
134-
return thread
135-
end
136-
end
137-
138-
private_constant :DaemonThreadFactory
139125
end
140126
end

0 commit comments

Comments
 (0)