RealtimeThreadFactory.java
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 rthrows Exception
37     {
38         return createThread(r,defaultRTThreadPriority);
39     }
40 
41     public Thread createThread(Runnable r, int prioritythrows Exception
42     {
43         Object priorityParams = priorityParameterConstructor.newInstance(priority);
44         return (Thread)threadConstructor.newInstance(priorityParams,null,null,null,null,r);
45     }
46 
47 }