public class ThreadService
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
static class |
ThreadService.Event |
| Modifier and Type | Field and Description |
|---|---|
private java.util.concurrent.locks.ReentrantLock |
criticalLock |
private java.lang.ThreadLocal<java.lang.ref.SoftReference<ThreadContext>> |
localContext
A thread-local soft reference to the current thread's ThreadContext.
|
private ThreadContext |
mainContext
A hard reference to the "main" context, so we always have one waiting for
"main" thread execution.
|
private java.lang.ThreadGroup |
rubyThreadGroup
The Java thread group into which we register all Ruby threads.
|
private java.util.Map<java.lang.Object,RubyThread> |
rubyThreadMap
A map from a Java Thread or Future to its RubyThread instance.
|
private Ruby |
runtime |
| Constructor and Description |
|---|
ThreadService(Ruby runtime) |
| Modifier and Type | Method and Description |
|---|---|
private void |
acquireCritical() |
private java.lang.ref.SoftReference |
adoptCurrentThread() |
void |
associateThread(java.lang.Object threadOrFuture,
RubyThread rubyThread) |
void |
deliverEvent(ThreadService.Event event) |
void |
disposeCurrentThread() |
void |
dissociateThread(java.lang.Object threadOrFuture) |
RubyThread[] |
getActiveRubyThreads() |
boolean |
getCritical() |
ThreadContext |
getCurrentContext()
In order to provide an appropriate execution context for a given thread,
we store ThreadContext instances in a threadlocal.
|
RubyThread |
getMainThread() |
java.lang.ThreadGroup |
getRubyThreadGroup() |
java.util.Map<java.lang.Object,RubyThread> |
getRubyThreadMap()
Get the map from threadlike objects to RubyThread instances.
|
ThreadContext |
getThreadContextForThread(RubyThread thread) |
void |
initMainThread() |
ThreadContext |
registerNewThread(RubyThread thread) |
private void |
releaseCritical() |
void |
setCritical(boolean critical) |
void |
setCurrentContext(ThreadContext context) |
void |
setMainThread(java.lang.Thread thread,
RubyThread rubyThread) |
void |
unregisterThread(RubyThread thread) |
private Ruby runtime
private ThreadContext mainContext
private java.lang.ThreadLocal<java.lang.ref.SoftReference<ThreadContext>> localContext
private java.lang.ThreadGroup rubyThreadGroup
private final java.util.Map<java.lang.Object,RubyThread> rubyThreadMap
private final java.util.concurrent.locks.ReentrantLock criticalLock
public ThreadService(Ruby runtime)
public void disposeCurrentThread()
public void initMainThread()
public ThreadContext getCurrentContext()
public void setCurrentContext(ThreadContext context)
private java.lang.ref.SoftReference adoptCurrentThread()
public RubyThread getMainThread()
public void setMainThread(java.lang.Thread thread,
RubyThread rubyThread)
public RubyThread[] getActiveRubyThreads()
public java.lang.ThreadGroup getRubyThreadGroup()
public ThreadContext getThreadContextForThread(RubyThread thread)
public ThreadContext registerNewThread(RubyThread thread)
public void associateThread(java.lang.Object threadOrFuture,
RubyThread rubyThread)
public void dissociateThread(java.lang.Object threadOrFuture)
public void unregisterThread(RubyThread thread)
public void setCritical(boolean critical)
private void acquireCritical()
private void releaseCritical()
public boolean getCritical()
public void deliverEvent(ThreadService.Event event)
public java.util.Map<java.lang.Object,RubyThread> getRubyThreadMap()