Threadクラス、Runnableインタフェースおよびシングルトン

戻る
/**
$Id: GuidManager.html,v 1.1 2009/06/22 16:11:45 kishi Exp kishi $
*/

public class GuidManager {
    private static long serialNo = 0;
    private static GuidManager uniqueInstance = null;

    /** シングルトンです */
    private GuidManager() {
        // Do nothing
    }

    public static GuidManager getInstance() {
        if ( uniqueInstance == null ) {
            uniqueInstance = new GuidManager();
        }

        return uniqueInstance;
    }

    /** 次の連番を得る */
    public synchronized long getSerialNo() {
        serialNo ++;
        return serialNo;
    }

    /** テストコード */
    public static void main( String[] args ) {


        Runnable runnableA = new Runnable() {
                                 public void run() {
                                     for ( int i = 0;i < 10;i++ ) {
                                         GuidManager gm = GuidManager.getInstance();
                                         System.out.println( "A: " + gm.getSerialNo() );
                                         try {
                                             Thread.sleep( 400 );
                                         } catch ( Exception e ) {
                                             e.printStackTrace();
                                         }
                                     }
                                 }
                             };

        Runnable runnableB = new Runnable() {
                                 public void run() {
                                     for ( int i = 0;i < 10;i++ ) {
                                         GuidManager gm = GuidManager.getInstance();
                                         System.out.println( "B: " + gm.getSerialNo() );
                                         try {
                                             Thread.sleep( 300 );
                                         } catch ( Exception e ) {
                                             e.printStackTrace();
                                         }
                                     }
                                 }
                             };

        Thread thread1 = new Thread( runnableA );
        thread1.start();
        Thread thread2 = new Thread( runnableB );
        thread2.start();

    }

}

■以下実行結果

$ java -cp . GuidManager
A: 1
B: 2
B: 3
A: 4
B: 5
A: 6
B: 7
A: 8
B: 9
B: 10
A: 11
B: 12
A: 13
B: 14
A: 15
B: 16
B: 17
A: 18
A: 19
A: 20


戻る
inserted by FC2 system