01 package org.apache.qpid.thread;
02
03 import java.lang.reflect.Constructor;
04
05 public class RealtimeThreadFactory implements ThreadFactory
06 {
07 private Class threadClass;
08 private Constructor threadConstructor;
09 private Constructor priorityParameterConstructor;
10 private int defaultRTThreadPriority = 20;
11
12 public RealtimeThreadFactory() throws Exception
13 {
14 defaultRTThreadPriority = Integer.getInteger("qpid.rt_thread_priority",20);
15 threadClass = Class.forName("javax.realtime.RealtimeThread");
16
17 Class schedulingParametersClass = Class.forName("javax.realtime.SchedulingParameters");
18 Class releaseParametersClass = Class.forName("javax.realtime.ReleaseParameters");
19 Class memoryParametersClass = Class.forName("javax.realtime.MemoryParameters");
20 Class memoryAreaClass = Class.forName("javax.realtime.MemoryArea");
21 Class processingGroupParametersClass = Class.forName("javax.realtime.ProcessingGroupParameters");
22
23 Class[] paramTypes = new Class[]{schedulingParametersClass,
24 releaseParametersClass,
25 memoryParametersClass,
26 memoryAreaClass,
27 processingGroupParametersClass,
28 java.lang.Runnable.class};
29
30 threadConstructor = threadClass.getConstructor(paramTypes);
31
32 Class priorityParameterClass = Class.forName("javax.realtime.PriorityParameters");
33 priorityParameterConstructor = priorityParameterClass.getConstructor(new Class[]{int.class});
34 }
35
36 public Thread createThread(Runnable r) throws Exception
37 {
38 return createThread(r,defaultRTThreadPriority);
39 }
40
41 public Thread createThread(Runnable r, int priority) throws Exception
42 {
43 Object priorityParams = priorityParameterConstructor.newInstance(priority);
44 return (Thread)threadConstructor.newInstance(priorityParams,null,null,null,null,r);
45 }
46
47 }
|