51 lines
1.5 KiB
Ruby
51 lines
1.5 KiB
Ruby
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||
|
# or more contributor license agreements. See the NOTICE file
|
||
|
# distributed with this work for additional information
|
||
|
# regarding copyright ownership. The ASF licenses this file
|
||
|
# to you under the Apache License, Version 2.0 (the
|
||
|
# "License"); you may not use this file except in compliance
|
||
|
# with the License. You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
#
|
||
|
# File passed to org.jruby.Main by bin/hbase. Pollutes jirb with hbase imports
|
||
|
# and hbase commands and then loads jirb. Outputs a banner that tells user
|
||
|
# where to find help, shell version, and loads up a custom hirb.
|
||
|
|
||
|
require 'thread'
|
||
|
|
||
|
class ThreadPool
|
||
|
def initialize(poolsize)
|
||
|
@queue = Queue.new
|
||
|
@poolsize = poolsize
|
||
|
@pool = Array.new(@poolsize) do |i|
|
||
|
Thread.new do
|
||
|
Thread.current[:id] = i
|
||
|
catch(:close) do
|
||
|
loop do
|
||
|
job, args = @queue.pop
|
||
|
job.call(*args)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def launch(*args, &block)
|
||
|
@queue << [block, args]
|
||
|
end
|
||
|
|
||
|
def stop
|
||
|
@poolsize.times do
|
||
|
launch { throw :close }
|
||
|
end
|
||
|
@pool.map(&:join)
|
||
|
end
|
||
|
end
|