携帯アプリにおけるマルチスレッディング(2)

自分が組んだ、マルチスレッドでの振動プログラム。

class Library extends Canvas implements Runnable{
    private int vibTime;
    private boolean bVibrate = false;
    
    public void vibrate( int time ){
        vibTime = time;
        if( vibTime > 0 ){
            if( !bVibrate ){
                bVibrate = true;
                Thread th = new Thread( this );
                th.start();
            }
        }
    }
    
    public void run(){
        // vibration thread
        if( bVibrate ){
            PhoneSystem.setAttribute(
                PhoneSystem.DEV_VIBRATOR ,
                PhoneSystem.ATTR_VIBRATOR_ON
            );
            while( vibTime > 0 ){
                try{
                    Thread.sleep( 50 );
                }catch( Exception e ){}
                vibTime -= 50;
            }
            bVibrate = false;
            PhoneSystem.setAttribute(
                PhoneSystem.DEV_VIBRATOR ,
                PhoneSystem.ATTR_VIBRATOR_OFF
            );
            return;
        }
        
        // main thread
        return;
    }
}

呼び出し側がシングルスレッドである限りは大丈夫……だと思う(;´Д`)


追記:
あー、これだと、振動スレッド以外のスレッドを付け足したときに困るなぁ……。
synchronized使って同期を取らないと無理か……orz