next up previous
Next: 6.5 ロボットの行動プログラム Up: 6 Lego Mindstorms の上で走るJavaVM Previous: 6.3 Lejos2.0.0 Javaクラス

6.4 Threadクラス

Threadクラスの定義は,以下のようになっている. native宣言により,LeJOSの中のCの関数を 呼び出して実現している.

package java.lang;

/**
 * A thread of execution (or task).
 * Now handles priorities, daemon threads
 * and interruptions.
 */
public abstract class Thread
{
    /**
     * The minimum priority that a
     * thread can have. The value is 1.
   */
    public final static
    int MIN_PRIORITY = 1;

    /**
     * The priority that is assigned to
     * the primordial thread. The value is 5.
     */
    public final static
    int NORM_PRIORITY = 5;
    
    /**
     * The maximum priority that a
     * thread can have. The value is 10.
     */
    public final static
    int MAX_PRIORITY = 10;
    
    // Note 1: This class cannot
    // have a static initializer.

    // Note 2: The following
    // fields are used by the VM.
    // Their sizes and location
    // can only be changed
    // if classes.h is changed
    // accordingly. Needless
    // to say, they are read-only.

    private Thread _TVM_nextThread;
    private int _TVM_waitingOn;
    private int _TVM_sleepUntil;
    private int _TVM_stackFrameArray;
    private int _TVM_stackArray;
    private byte _TVM_stackFrameArraySize;
    private byte _TVM_monitorCount;
    private byte _TVM_threadId; 
    private byte _TVM_state; 
    private byte _TVM_priority; 
    private byte _TVM_interrupted; 
    private byte _TVM_daemon; 

    // Extra instance state follows:
  
    private String name;

    public final boolean isAlive() {
        return _TVM_state > 1;
    }    
          
    public Thread() {
        this ("");
    }

    public Thread (String name)        {
        Thread t = currentThread();
        if (t == null)
            setPriority(NORM_PRIORITY);
        else
            setPriority(t.getPriority());        
        this.name = name;
    }

    public abstract void run();
  
    public final native
    void start();
    public static native
    void yield();
    public static native
    void sleep (long aMilliseconds)
        throws InterruptedException;
    public static native
    Thread currentThread();
    public final native
    int getPriority();
    /**
     * Set the priority of this thread.
     * Higher number have higher priority.
     * The scheduler will always run
     * the highest priority thread
     * in preference
     * to any others. If more than one
     * thread of that priority exists the
     * scheduler will time-slice them.
     * In order for lower priority threas
     * to run a higher priority thread
     * must cease to be runnable. i.e. it
     * must exit, sleep or wait on a
     * monitor. It is not sufficient to just
     * yield.
     * <P>
     * Threads inherit the priority of
     * their parent. The primordial thread
     * has priority NORM_PRIORITY.
     *
     * @param priority must be
     * between MIN_PRIORITY and MAX_PRIORITY.
     */
    public final native
    void setPriority(int priority);
  
    /**
     * Set the interrupted flag.
     * If we are asleep we will wake up
     * and an InterruptedException will be thrown.
     */
    public native
    void interrupt();
    public static native
    boolean interrupted();
    public final native
    boolean isInterrupted();
  
    /**
     * Set the daemon flag.
     * If a thread is a daemon
     * thread its existence will
     * not prevent a JVM from exiting.
     */
    public final native
    boolean isDaemon();
    public final native
    void setDaemon(boolean on);
  
    /**
     * Join not yet implemented
     */
    public final native
    void join() throws InterruptedException;
    public final native
    void join(long timeout)
        throws InterruptedException;
}


generated through LaTeX2HTML. M.Inaba 平成18年5月7日