¤¿¤á¤Ë¤Ê¤ë¥Û¡¼¥à¥Ú¡¼¥¸ ¤ªÌ䤤¹ç¤ï¤»




TOP > Java > ¥¹¥ì¥Ã¥É
¥¹¥ì¥Ã¥É
Java¤Ç¤Ï2¤Ä¤Î°ÕÌ£¤ÇÍѤ¤¤é¤ì¤ë¡£
  • java.lang.Thread¤Î¥¤¥ó¥¹¥¿¥ó¥¹
  • ¼Â¹Ô¥¹¥ì¥Ã¥É

  • java.lang.Thread¤Ï¤¿¤À¤Î¥ª¥Ö¥¸¥§¥¯¥È¡£¼Â¹Ô¥¹¥ì¥Ã¥É¤Ï¡¢Æȼ«¤Î¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤òÈ÷¤¨¤¿ÆÈΩ¤·¤¿¥×¥í¥»¥¹¡£Java¤Ç¤Ï¡¢°ì¤Ä¤Î¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤Ë°ì¤Ä¤Î¥¹¥ì¥Ã¥É¤¬Â¸ºß¤¹¤ë¡£Î㤨¤Ð¡¢main()¥á¥½¥Ã¥É¤Ï¡Ö¥á¥¤¥ó¥¹¥ì¥Ã¥É¡×¤È¸Æ¤Ð¤ì¤ë°ì¤Ä¤Î¥¹¥ì¥Ã¥ÉÆâ¤Ç¼Â¹Ô¤µ¤ì¤ë¡£
    ¿·¤·¤¤¥¹¥ì¥Ã¥É¤òºîÀ®¤¹¤ë¤È¡¢¤¹¤°¤Ë¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤¬³ÎÊݤµ¤ì¡¢¤½¤Î¿·¤·¤¤¥¹¥ì¥Ã¥É¤«¤é¼Â¹Ô¤µ¤ì¤¿¥á¥½¥Ã¥É¤Ï¡¢¤½¤ÎÆȼ«¤Î¥³¡¼¥ë¥¹¥¿¥Ã¥¯Æâ¤ÇÆ°ºî¤¹¤ë¡£
    ¥¹¥ì¥Ã¥É¤Ë´Ø¤·¤Æ°ìÈÖÃí°Õ¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¤Î¤Ï¡¢¡Ö¥¹¥ì¥Ã¥É¤Ë´Ø¤·¤ÆÊݾ㤵¤ì¤Æ¤¤¤ë»ö¤Ï²¿°ì¤Ä¤Ê¤¤¡×¤È¤¤¤¦¤³¤È¡£

    ¥¹¥ì¥Ã¥É¤ÎºîÀ®
    Java¤Î¥¹¥ì¥Ã¥É¤Ï¡¢java.lang.Thread¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤È¤·¤ÆºîÀ®¤µ¤ì¤ë¡£¥¹¥ì¥Ã¥É¤Î½èÍý¤Ïrun()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹»ö¤Ë¤è¤ê¤Ï¤¸¤Þ¤ë¡£¹Ô¤¤¤¿¤¤ºî¶È¤ò¡Ö¥¸¥ç¥Ö¡×¤È¤¤¤¦¡£
  • java.lang.Thread¥¯¥é¥¹¤Î³ÈÄ¥¡£
  • Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¡£

  • ¥¹¥ì¥Ã¥É¤ÎÄêµÁ
    java.lang.Thread¤ò³ÈÄ¥¤¹¤ë
    £±¡¥Thread¥¯¥é¥¹¤ò³ÈÄ¥¤¹¤ë
    £²¡¥run()¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë

    java.lang.Thread¤ò³ÈÄ¥¤¹¤ëÎã
    class MyThread extends Thread{
        public void run(){
            System.out.println("Test") ;
        }
    }
    
    

    Thread¥¯¥é¥¹¤ò³ÈÄ¥¤·¤¿¾ì¹ç¡¢¤Û¤«¤Î¥¯¥é¥¹¤ò°ìÀÚ³ÈÄ¥¤Ç¤­¤Ê¤¯¤Ê¤ë¡£Thread¤Î¥µ¥Ö¥¯¥é¥¹¤Ç¤Ï¡¢run()¥á¥½¥Ã¥É¤ò¼«Í³¤Ë¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¹¤ë»ö¤¬¤Ç¤­¤ë¡£Ã¢¤·¡¢¥ª¡¼¥Ð¡¼¥í¡¼¥É¤·¤¿¥á¥½¥Ã¥É¤Ï¡¢³Æ¼«ÌÀ¼¨Åª¤Ë¸Æ¤Ó½Ð¤µ¤Ê¤¤¤È¡¢¼Â¹Ô¤µ¤ì¤Ê¤¤¡£

    java.lang.Thread¤ò³ÈÄ¥¤·¡¢run()¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¹¤ëÎã
    class MyThread extends Thread{
        public void run(){
            System.out.println("Test") ;
        }
        public void run(String s){
            System.out.println(s) ;
        }
    }
    
    

    Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î¼ÂÁõ
    Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¤Ï¡¢É¬Íפ˱þ¤¸¤Æ¥¯¥é¥¹¤ò³ÈÄ¥¤·¤Ä¤Ä¡¢ÆÈΩ¤·¤¿¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤¹¤Ù¤­Æ°ºî¤òÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

    Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ëÎã
    class MyRunnable implements Runnable{
        public void run(){
            System.out.println("Test") ;
        }
    }
    
    

    ¥¹¥ì¥Ã¥É¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½
    ¥¹¥ì¥Ã¥É¤Î¼Â¹Ô¤Ë¤Ï¡¢Thread¥ª¥Ö¥¸¥§¥¯¥È¤¬É¬Íפˤʤ롣¤³¤ì¤Ï¡¢¤É¤Á¤é¤Î¾ì¹ç¤Ç¤âɬÍס£Thread¥¯¥é¥¹¤ò³ÈÄ¥¤·¤¿¾ì¹ç¤Ï¡¢Ã±¤ËThread¥¯¥é¥¹¤ò¥¤¥ó¥¹¥¿¥ó¥¹²½¤¹¤ì¤Ð¤è¤¤¡£Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¤Ï¡¢¥¹¥ì¥Ã¥É¤È¥¸¥ç¥Ö(run()¥á¥½¥Ã¥É¤Î¥³¡¼¥É)¤ò°ì¤Ä¤Î¥¯¥é¥¹¤Ë¤Þ¤È¤á¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢Thread¥¯¥é¥¹¤Ë¤Ï¥¹¥ì¥Ã¥É¸ÇÍ­¤Î¥³¡¼¥É¤òµ­½Ò¤·¡¢Runnable¼ÂÁõ¥¯¥é¥¹¤Ë¤Ï¥¸¥ç¥Ö¤òµ­½Ò¤¹¤ë

    Thread¥¯¥é¥¹¤ò³ÈÄ¥¤·¤¿¾ì¹ç¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½¤ÎÎã
    MyThread my = new MyThread() ;
    
    

    Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½¤ÎÎã
    MyRunnable my = new MyRunnable() ;//¼ÂÁõ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½
    
    Thread t = new Thread(my) ; //¥¤¥ó¥¹¥¿¥ó¥¹¤òThread¥ª¥Ö¥¸¥§¥¯¥È¤ËÅϤ¹¡£
    
    

    °ú¿ô̵¤·¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ç¥¹¥ì¥Ã¥É¤òºîÀ®¤·¤¿¾ì¹ç¡¢¥¹¥ì¥Ã¥É¤Ïµ¯Æ°¤¹¤Ù¤­¤È¤­¤Ë¤Ê¤ë¤È¼«¿È¤Îrun()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¡£Runnable¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¤Ï¡¢¥¹¥ì¥Ã¥É¼«¿È¤Îrun()¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¡¢Æȼ«¤ÇÄêµÁ¤·¤¿run()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤è¤¦¤Ë»Ø¼¨¤ò¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¡£¤½¤Î¤¿¤áThread¥³¥ó¥¹¥È¥é¥¯¥¿¤ËRunnable¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÅϤ¹¡£¤Á¤Ê¤ß¤Ë¤³¤ÎÅϤ¹¥¤¥ó¥¹¥¿¥ó¥¹¤ò¡Ö¥¿¡¼¥²¥Ã¥È¡×¤â¤·¤¯¤Ï¡¢¡Ö¥¿¡¼¥²¥Ã¥ÈRunnable¡×¤È¸Æ¤Ö¡£

    ¥¹¥ì¥Ã¥É¤Î½é´ü¾õÂÖ
    ¼Â¹Ô¥¹¥ì¥Ã¥É(¿·¤·¤¤¥³¡¼¥ë¥¹¥¿¥Ã¥¯)¤òºîÀ®¤¹¤ë¤Ë¤Ï¡¢¥¹¥ì¥Ã¥É¤òµ¯Æ°¤¹¤ëɬÍפ¬¤¢¤ë¡£Thread¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤¿¤À¤±¤Ç¤Ï¡¢¤Þ¤Àµ¯Æ°¤·¤Æ¤¤¤Ê¤¤¡£¤³¤Îµ¯Æ°¤·¤Æ¤¤¤Ê¤¤¾õÂÖ¤ò¡Ö½é´ü¾õÂ֡פȤ¤¤¦¡£½é´ü¾õÂ֤λþ¤Ï¡¢¥¹¥ì¥Ã¥É¤Ï¤Þ¤ÀÀ¸Â¸¤·¤Æ¤¤¤ë¤È¤Ï¤¤¤¨¤Ê¤¤¡£¥¹¥ì¥Ã¥É¤¬À¸Â¸¤·¤Æ¤¤¤ë¤«¤É¤¦¤«Ä´¤Ù¤ë¤Ë¤Ï¡¢Thread¥¤¥ó¥¹¥¿¥ó¥¹¤ËÂФ·¤Æ¡¢¡ÖisAlive()¡×¥á¥½¥Ã¥É¤ò»È¤¦¡£

    ¥¹¥ì¥Ã¥É¤Îµ¯Æ°
    ¥¹¥ì¥Ã¥É¤òµ¯Æ°¤¹¤ë¤Ë¤Ï¡¢¿·¤·¤¤¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤òΩ¤Á¾å¤²¤ëɬÍפ¬¤¢¤ë¡£start()¥á¥½¥Ã¥É¤Ç¿·¤·¤¤¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤òΩ¤Á¾å¤²¤ë¡£start()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹»ö¤Ë¤è¤ê¡¢°Ê²¼¤Î»öÊÁ¤¬¼Â¹Ô¤µ¤ì¤ë¡£
    £±¡¥¿·¤·¤¤¼Â¹Ô¥¹¥ì¥Ã¥É¤¬µ¯Æ°¤¹¤ë(¿·¤·¤¤¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤â³ÎÊݤµ¤ì¤ë)
    £²¡¥¥¹¥ì¥Ã¥É¤Î¾õÂÖ¤¬¡Ö½é´ü¾õÂ֡פ«¤é¡Ö¼Â¹Ô²Äǽ¾õÂ֡פˤʤ롣
    £³¡¥¥¹¥ì¥Ã¥É¤Ë¼Â¹Ô¤Îµ¡²ñ¤¬Í¿¤¨¤é¤ì¤Æ¡¢¥¿¡¼¥²¥Ã¥È¤Îrun()¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤ë¡£
    ¢¨µ¯Æ°¤µ¤ì¤ë¤Î¤Ï¡¢Runnable¤Ç¤Ï¤Ê¤¯Thread¡£Thread¥¤¥ó¥¹¥¿¥ó¥¹¤ËÂФ·¤Æstart()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¡£
    ¥¹¥ì¥Ã¥É¤Ï¡¢¥¿¡¼¥²¥Ã¥È¤Îrun()¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·½ª¤ï¤ë¤È¡¢¼Â¹Ô¥¹¥ì¥Ã¥É¤Ï¤Ê¤¯¤Ê¤ë¡£¤¹¤Ê¤ï¤Á¡¢Thread¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ï¤¢¤ë¤¬¡¢¼Â¹Ô¥¹¥ì¥Ã¥É¤¬¤Ê¤¯¤Ê¤ë¡£¤è¤Ã¤Æ¡¢¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤¬²ò»¶¤µ¤ì¡¢¥¹¥ì¥Ã¥É¤Ï¡Ö»à¤ó¤À¡×¾õÂ֤ˤʤ롣¢ª¡Ö¤¤¤Ã¤¿¤ó½ªÎ»¤·¤¿¥¹¥ì¥Ã¥É¤Ï2Å٤ȼ¹ԤǤ­¤Ê¤¤¡£¡×

    ¥¹¥ì¥Ã¥É¤Îµ¯Æ°¤ÎÎã
    class MyRunnable implements Runnable{
        public void run(){
            for(int i = 1 ; i < 6 ; i++){
                System.out.println("¤Ï¤¸¤á¤Æ¤Î¥¹¥ì¥Ã¥É") ;
            }
        }
    }
    
    class Test{
        public static void main(String[] argsa){
            MyRunnable r = new MyRunnable() ;
    
            Thread t = new Thread(r) ;
    
            t.start() ;
        }
    }
    
    

    ¸½ºß¼Â¹Ô¤·¤Æ¤¤¤ë¥¹¥ì¥Ã¥É¤Î̾Á°¤ò½ÐÎϤ¹¤ëÎã
    class MyRunnable implements Runnable{
        public void run(){
            System.out.print("¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Ï¡¢") ;
            System.out.println(Thread.currentThread().getName() + "¤Ç¤¹¡£") ;//­¡
        }
    }
    
    class Test{
        public static void main(String[] args){
            MyRunnable r = new MyRunnable() ;
            Thread t = new Thread(r) ;//­¢
            t.setName("MyRunnable") ;//­£
            t.start() ;
        }
    }
    
    

    ­¡¡§currentThread()¤ÏÀÅŪ¥á¥½¥Ã¥É¡£½¾¤Ã¤Æ¡¢¥¯¥é¥¹Ì¾.¥á¥½¥Ã¥É̾¤Ç¸Æ¤Ó½Ð¤»¤ë¡£¤³¤Î¥á¥½¥Ã¥É¤Ï¡¢¡Ö¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£¡×¤³¤Î¾ì¹ç¡¢¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Ï¡¢­¢¤ÇºîÀ®¤·¤¿¥¹¥ì¥Ã¥É¡£getName()¥á¥½¥Ã¥É¤Ç¸½ºß¤Î¥¹¥ì¥Ã¥É̾¤ò¼èÆÀ¤¹¤ë¡£
    ­£¡§setName(String name)¥á¥½¥Ã¥É¤Ï¡¢¡Ö¤³¤Î¥¹¥ì¥Ã¥É¤Î̾Á°¤ò°ú¿ô name ¤ËÅù¤·¤¯¤Ê¤ë¤è¤¦¤ËÊѹ¹¤·¤Þ¤¹¡£¤è¤Ã¤Æ¡¢¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É̾¤ò¡ÖMyRunnable¡×¤ÈÊѹ¹¤·¡¢¤½¤Î¥¹¥ì¥Ã¥É̾¤òsetName()¥á¥½¥Ã¥É¤Ç¼èÆÀ¤¹¤ë¡£
    ­£¤òÀßÄꤷ¤Ê¤¤¤È¡¢ÌÀ¼¨Åª¤Ë̾Á°¤¬³ä¤êÅö¤Æ¤é¤ì¤ë¡£

    ¥¹¥ì¥Ã¥É¤Î̾Á°¤ò¼«Æ°Åª¤Ë½ÐÎϤ¹¤ëÎã
    class MyRunnable implements Runnable{
        public void run(){
            System.out.print("¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Ï¡¢") ;
            System.out.println(Thread.currentThread().getName() + "¤Ç¤¹¡£") ;
        }
    }
    
    class Test{
        public static void main(String[] args){
            MyRunnable r = new MyRunnable() ;
            Thread t = new Thread(r) ;
            t.start() ;
        }
    }
    
    

    ¤³¤Î¥½¡¼¥¹¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ë¤È¡¢¡ÖThread-0¡×¤È½ÐÎϤµ¤ì¤ë¡£

    currentThread()¥á¥½¥Ã¥É¤Ï¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¤Î¤Ç¡¢°Ê²¼¤Î¤è¤¦¤Ë¤Ç¤­¤ë¡£

    main()¥á¥½¥Ã¥É̾¤ò½ÐÎϤ¹¤ëÎã
    class Test{
        public static void main(String[] args){
            System.out.println(Thread.currentThread().getName()) ;
        }
    }
    
    

    ¤³¤Î¥½¡¼¥¹¥³¡¼¥É¤Î¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Ïmain()¥á¥½¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤Ê¤Î¤Ç¡¢main¤Èɽ¼¨¤µ¤ì¤ë¡£

    Ê£¿ô¤Î¥¹¥ì¥Ã¥É¤òµ¯Æ°¤¹¤ë
    Thread¥¤¥ó¥¹¥¿¥ó¥¹¤ËÂФ·¤Æ¡¢start()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¡£Java»ÅÍͤǤϡ¢³Æ¥¹¥ì¥Ã¥É¤Îµ¯Æ°¤·¤¿½ç½øÄ̤ê¤Ëµ¯Æ°¤¹¤ë¤È¤Ï½ñ¤«¤ì¤Æ¤¤¤Ê¤¤¡£¤¹¤Ê¤ï¤Á¡¢¥×¥í¥°¥é¥Þ¡¼¤Î°Õ¿Þ¤·¤Æ¤¤¤ëÄ̤ê¤Ëµ¯Æ°¤¹¤ëÊݾã¤Ï¤Ê¤¤¡£¤³¤ì¤Ï¡¢¥¹¥ì¥Ã¥É¤Î¼Â¹Ô½ç½ø¤Ï¡Ö¥¹¥±¥¸¥å¡¼¥é¡×¤Ë¤è¤Ã¤Æ·èÄꤵ¤ì¡¢¥×¥í¥°¥é¥Þ¡¼¤Ï¥¹¥±¥¸¥å¡¼¥é¤òÀ©¸æ¤Ç¤­¤Ê¤¤¤¿¤á¡£
    ¥¹¥ì¥Ã¥É¼«ÂΤòÀ©¸æ¤Ç¤­¤Ê¤¤¤¬¡¢¤¢¤ë¥¹¥ì¥Ã¥É¤òµ¯Æ°¤·¤¿¸å¤Ë¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤¬´°Î»¤¹¤ë¤Þ¤Ç¤½¤Î¥¹¥ì¥Ã¥É¤òÄä»ß¤·¤Æ¤ª¤¯¤³¤È¤Ï¤Ç¤­¤ë¡£

    ¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤ÎÎã
    class MyRunnable implements Runnable{
        public void run(){
            for(int i = 1 ; i < 6 ; i++){
                System.out.println(Thread.currentThread().getName()) ;
            }
        }
    }
    
    class Test{
        public static void main(String[] argsa){
            MyRunnable r = new MyRunnable() ;
            Thread t1 = new Thread(r) ;
            t1.setName("Thread1") ;
            Thread t2 = new Thread(r) ;
            t2.setName("Thread2") ;
            Thread t3 = new Thread(r) ;
            t3.setName("Thread3") ;
            t1.start() ;
            t2.start() ;
            t3.start() ;
        }
    }
    
    

    ¾åµ­¤ÎÎã¤Î·«¤êÊÖ¤·¤ò¡¢100¤Ë¤«¤¨¤Æ¤ß¤ë¤È½ÐÎÏ·ë²Ì¤¬ÊѤï¤Ã¤Æ¤¯¤ë¡£¤³¤ì¤Ï¡¢¥¹¥±¥¸¥å¡¼¥é¤¬¼Â¹Ô½ç½ø¤ò·è¤á¤ë°Ù¡£

    ¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é
    ¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é¤ÏJVM¤Î°ìÉô¤Ç¤¢¤ê¡¢¤¤¤Ä¤É¤Î¼Â¹Ô²Äǽ¾õÂ֤ˤ¢¤ë¥¹¥ì¥Ã¥É¤ò¼Â¹Ô¤¹¤Ù¤­¤«È½ÃǤ¹¤ë¡£¤Þ¤¿¡¢¥¹¥ì¥Ã¥É¤Î¼Â¹ÔÃæ¾õÂÖ¤ò²ò½ü¤¹¤ë»ö¤â¤¢¤ë¡£¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é¤Ï¡¢¼¡¤Ë¤É¤Î¥¹¥ì¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤«¤ò¡¢¼Â¹Ô²Äǽ¾õÂ֤Υ¹¥ì¥Ã¥É¤ÎÃ椫¤é°ì¤Ä¤À¤±Ç¤°Õ¤ËÁªÂò¤µ¤ì¤ë¡£¥¹¥ì¥Ã¥É¤Î½½¸Ä¿Í½ê¤Ë¤è¤¯»È¤ï¤ì¤ë¤Î¤¬¡¢¡Ö¥­¥å¡¼Êý¼°¡×¤ÎÆ°ºî¤Ç¤¢¤ë¤¬É¬¤º¤½¤¦¤Ê¤ë¤È¤â¸Â¤é¤Ê¤¤¡£
    ¡Ö¥­¥å¡¼Êý¼°¡×¤È¤Ï¡¢³Æ¥¹¥ì¥Ã¥É¤¬¼«Ê¬¤Î½çÈÖ¤ò½ª¤¨¤ë¤È¡¢¼Â¹Ô²Äǽ¥×¡¼¥ë¤ÎÎó¤ÎËöÈø¤Ë°ÜÆ°¤·¡¢Îó¤ÎÀèƬ¤¬²ó¤Ã¤Æ¤¯¤ë¤Þ¤Ç¤º¤Ã¤ÈÂÔ¤Á¡¢ÀèƬ¤¬Í褿¤é¤Þ¤¿¼Â¹Ô¤Î½çÈÖ¤ò³ÍÆÀ¤¹¤ë¤È¤¤¤¦Êý¼°¡£

    ¥¹¥ì¥Ã¥É¤Î¾õÂÖ
    ½é´ü¾õÂÖ¡¦¡¦¡¦Thread¥¤¥ó¥¹¥¿¥ó¥¹¤ÏºîÀ®¤µ¤ì¤¿¤¬¡¢¤Þ¤Àstart()¥á¥½¥Ã¥É¤Ï¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤¤Ê¤¤¾õÂÖ¡£½é´ü¾õÂ֤Υ¹¥ì¥Ã¥É¤ÏÍ­¸ú¤ÊThread¥ª¥Ö¥¸¥§¥¯¥È¤À¤¬¡¢¼Â¹Ô¥¹¥ì¥Ã¥É¤Ç¤Ï¤Ê¤¤¡£¤Þ¤ÀÀ¸Â¸¤·¤Æ¤¤¤ë¤È¤Ï¤ß¤Ê¤µ¤ì¤Ê¤¤¡£
    ¼Â¹Ô²Äǽ¾õÂÖ¡¦¡¦¡¦¼Â¹ÔÂоݤȤ·¤Æ»ñ³Ê¤ò»ý¤Ã¤Æ¤¤¤ë¤¬¡¢¤Þ¤À¼Â¹Ô¤¹¤ë¥¹¥ì¥Ã¥É¤È¤·¤ÆÁªÂò¤µ¤ì¤Æ¤¤¤Ê¤¤¾õÂÖ¡£start()¥á¥½¥Ã¥É¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¤È¡¢¥¹¥ì¥Ã¥É¤Ï¼Â¹Ô²Äǽ¾õÂ֤ˤʤ롣⤷¡¢¼Â¹Ô¤µ¤ì¤¿¸å¤ä¡¢¥Ö¥í¥Ã¥¯¾õÂÖ¡¦¥¹¥ê¡¼¥×¾õÂÖ¡¦ÂÔµ¡¾õÂÖ¤«¤éÉüµ¢¤·¤¿¸å¤Ç¤â¡¢ºÆ¤Ó¼Â¹Ô²Äǽ¾õÂÖ¤ËÌá¤ë»ö¤¬¤¢¤ë¡£
    ¼Â¹ÔÃæ¾õÂÖ¡¦¡¦¡¦¥¹¥ì¥Ã¥É¤¬³èÆ°¤¹¤ë¤È¤­¡£¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é¤¬¼Â¹Ô²Äǽ¥×¡¼¥ë¤«¤é¤½¤Î¥¹¥ì¥Ã¥É¤ò¸½ºß¤Î¼Â¹Ô¥×¥í¥»¥¹¤È¤·¤ÆÁªÂò¤·¤Æ¤¤¤ë¾õÂÖ¤ò»Ø¤¹¡£¼Â¹ÔÃæ¾õÂÖ¤¬²ò½ü¤µ¤ì¤ëÍ×°ø¤Ï¡¢¡Ö¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é¤Îµ¤¤Þ¤°¤ì¡×¡ÖÂÔµ¡¾õÂ֡ס֥֥í¥Ã¥¯¾õÂ֡ס֥¹¥ê¡¼¥×¾õÂ֡פ¬ÁªÂò¤µ¤ì¤¿»þ¡£¼Â¹ÔÃæ¾õÂ֤˻ê¤ë¤Ë¤Ï¡¢¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é¤¬ÁªÂò¤¹¤ë°Ê³°¤ËÊýË¡¤Ï¤Ê¤¤¡£
    ¥¹¥ê¡¼¥×¾õÂÖ¡¿ÂÔµ¡¾õÂÖ¡¿¥Ö¥í¥Ã¥¯¾õÂÖ¡¦¡¦¡¦¤³¤ì¤é3¤Ä¤Î¾õÂ֤ϡ¢¥¹¥ì¥Ã¥É¤ÏÀ¸Â¸¤·¤Æ¤¤¤ë¤¬¡¢¸½ºß¤Ï¼Â¹ÔÂоݤȤ·¤Æ¤Î»ñ³Ê¤ò»ý¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿¾õÂÖ¡£
    ½ªÎ»¾õÂÖ¡¦¡¦¡¦run()¥á¥½¥Ã¥É¤¬´°Î»¤¹¤ë¤È¡¢¥¹¥ì¥Ã¥É¤Ï½ªÎ»¾õÂ֤ˤʤ롣¤³¤Î¾õÂÖ¤ÎThread¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Þ¤À·Á¤ò»Ä¤·¤Æ¤¤¤ë¤¬¡¢ÆÈΩ¤·¤¿¼Â¹Ô¥¹¥ì¥Ã¥É¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤ë¡£¤¤¤Ã¤¿¤ó½ªÎ»¤·¤¿¥¹¥ì¥Ã¥É¤Ï2Å٤ȵ¯Æ°¤Ç¤­¤Ê¤¤¡£½ªÎ»¾õÂÖ¤ÎThread¥¤¥ó¥¹¥¿¥ó¥¹¤ËÂФ·¤Æstart()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤È¡¢¥é¥ó¥¿¥¤¥àÎã³°¤¬È¯À¸¤¹¤ë¡£

    ¥¹¥ì¥Ã¥É¤Î¼Â¹ÔÍÞÀ©[¥¹¥ê¡¼¥×¾õÂÖ]
    sleep()¥á¥½¥Ã¥É¤ÏThread¥¯¥é¥¹¤ÎÀÅŪ¥á¥½¥Ã¥É¡£¥¹¥ì¥Ã¥É¤Î¿Ê¹Ô¶ñ¹ç¤òÃ٤餻¤¿¤¤¤È¤­¤Ë»ÈÍÑ¡£¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤ò¥¹¥ê¡¼¥×¾õÂ֤ˤ·¤Æ¡¢¤½¤Î¸å¡Ö¼Â¹Ô²Äǽ¾õÂ֡פˤ¹¤ë¡£¥¹¥ì¥Ã¥É¤Ï¼Â¹Ô²Äǽ²Äǽ¾õÂ֤ˤʤë¤Î¤Ç¡¢¥¹¥ì¥Ã¥É¥¹¥±¥¸¥å¡¼¥é¤ËÁªÂò¤µ¤ì¤Ê¤¤¸Â¤ê¥¹¥ì¥Ã¥É¤Ï¼Â¹Ô¤µ¤ì¤Ê¤¤¡£
    sleep()¥á¥½¥Ã¥É¤Ç¥¹¥ì¥Ã¥É¤òÄä»ß¤µ¤»Ì²¤é¤»¤¿¸å¡¢¥¹¥ì¥Ã¥É¤òµ¯¤³¤µ¤Ê¤¤¤È¼Â¹Ô²Äǽ¾õÂ֤ˤÏÌá¤é¤Ê¤¤¡£
    ¥¹¥ì¥Ã¥É¤ò°ì»þÄä»ß¤¹¤ë¤Ë¤Ï¡¢ÀÅŪ¤ÊThread.sleep()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¡¢Ää»ß¤¹¤ë»þ´Ö¤ò¥ß¥êÉÃñ°Ì¤Ç»ØÄꤹ¤ë¡£
    sleep()¥á¥½¥Ã¥É¤òµ­½Ò¤¹¤ë¾ì½ê¤Ï¡¢run()¥á¥½¥Ã¥ÉÆâ¤Ëµ­½Ò¤¹¤ë¡£¤Þ¤¿¡¢sleep()¥á¥½¥Ã¥É¤Ï¥Á¥§¥Ã¥¯Îã³°InterruptedException¤òÅꤲ¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢É¬¤ºtry-catchʸÆâ¤Ëµ­½Ò¤¹¤ë¤³¤È¡£¤³¤Î¥á¥½¥Ã¥É¤Ï¡¢¥í¥Ã¥¯¤Ï³«Êü¤·¤Ê¤¤¡£

    sleep()¥á¥½¥Ã¥É¤ÎÎã1
    class MyRunnable implements Runnable{
        public void run(){
            for(int i = 1 ; i < 11 ; i++){
                System.out.println("¥¹¥ì¥Ã¥É" + i) ;
            try{
                Thread.sleep(60*1000) ;
            }
            catch(InterruptedException ex){ }
            }
        }
    }
    
    class Test{
        public static void main(String[] args){
            MyRunnable r = new MyRunnable() ;
            Thread t = new Thread(r) ;
            t.start() ;
        }
    }
    
    

    sleep()¥á¥½¥Ã¥É¤ÎÎã1
    class MyRunnable implements Runnable{
        public void run(){
            for(int i = 1 ; i < 101 ; i ++){
                if(i % 10 == 0){
                    System.out.println(i + "¤Ï10¤ÎÇÜ¿ô¤Ç¤¹¡£") ;
                }
                else{
                    System.out.println(i) ;
                }
                try{
                    Thread.sleep(1000) ;
                }
                catch(InterruptedException ex){ }
            }
        }
    }
    
    class Test{
        public static void main(String[] args){
            MyRunnable r = new MyRunnable() ;
            Thread t = new Thread(r) ;
            t.start() ;
        }
    }
    
    

    ¥¹¥ì¥Ã¥É¤ÎÍ¥Àè½ç°Ì¤Èyield()¥á¥½¥Ã¥É
    ¥¹¥ì¥Ã¥É¤ÏÄ̾ï1¡Á10¤Þ¤Ç¤ÎÍ¥Àè½ç°Ì¤ÎÃͤ¬³ä¤êÅö¤Æ¤é¤ì¤ë¡£¡ÊÈϰϤ¬10̤Ëþ¤Ë¤Ê¤ë»þ¤â¤¢¤ë¡Ë
    ¥¹¥ì¥Ã¥É¤¬¼Â¹Ô²Äǽ¾õÂ֤ˤʤä¿»þ¡¢¤½¤Î¥¹¥ì¥Ã¥É¤ÎÍ¥Àè½ç°Ì¤¬¼Â¹Ô²Äǽ¥×¡¼¥ëÆâ¤Î¤½¤Î¥¹¥ì¥Ã¥É¤Î¤â¤Î¤è¤ê¤â¹â¤¯¡¢¤«¤Ä¡¢¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Î¤â¤Î¤è¤ê¤â¹â¤«¤Ã¤¿¾ì¹ç¡¢¸½ºß¼Â¹ÔÃæ¤Î¥¹¥ì¥Ã¥É¤Ï¼Â¹Ô²Äǽ¾õÂÖ¤ËÌᤵ¤ì¡¢¤½¤Î»þÅÀ¤ÇºÇ¤âÍ¥Àè½ç°Ì¤Î¹â¤¤¥¹¥ì¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤ë¡£¤¹¤Ê¤ï¤Á¡¢¤¤¤Ä¤¤¤«¤Ê¤ë»þ¤Ç¤â¡¢ºÇ¤âÍ¥Àè½ç°Ì¤Î¹â¤¤¥¹¥ì¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤ë¡£
    Í¥Àè½ç°Ì¤¬°ì½ï¤Î¾ì¹ç¤Ï¡¢¤É¤Î¥¹¥ì¥Ã¥É¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¤«¤Ï¥¹¥±¥¸¥å¡¼¥é¼¡Âè¡£¤Á¤Ê¤ß¤ËÍ¥Àè½ç°Ì¤Ï¡¢¿ô¤¬Â礭¤¤¤Û¤¦¤¬¾å°Ì¤Ë¤Ê¤ë¡£
    ÀÅŪ¥á¥½¥Ã¥ÉsetPriority()¤ò»È¤Ã¤ÆÍ¥Àè½ç°Ì¤òÊѹ¹¤¹¤ë¡£¾°¡¢°Ê²¼¤ÎfinalÄê¿ô¤¬¤¢¤êɬ¤º¤·¤â¥¹¥ì¥Ã¥É¤ÎÍ¥ÀèÈϰϤ¬10¤È¤Ï¸Â¤é¤Ê¤¤¡£
    [finalÄê¿ô]
  • MIN_PRIORITY
  • NORM_PRIORITY
  • MAX_PRIORITY

  • setPriority()¤Èyield()¥á¥½¥Ã¥É
    class MyRunnable implements Runnable{
        public void run(){
            for(int i = 0 ; i < 100 ; i++ ){
                System.out.println(Thread.currentThread().getName()) ;
            }
        }
    }
    
    class Test{
        public static void main(String[] args){
            MyRunnable r = new MyRunnable() ;
            Thread t1 = new Thread(r) ;
            Thread t2 = new Thread(r) ;
            Thread t3 = new Thread(r) ;
            t1.setName("Thread1") ;
            t1.setPriority(3) ;
            t2.setName("Thread2") ;
            t2.setPriority(3) ;
            t3.setName("Thread3") ;
            t3.setPriority(5) ;
            t1.start() ;
            t1.yield() ;
            t2.start() ;
            t2.yield() ;
            t3.start() ;
        }
    }
    
    

    join()¥á¥½¥Ã¥É
    ÈóÀÅŪ¥á¥½¥Ã¥Éjoin()¤Ï·ë¹ç¤ÎƯ¤­¤ò¤¹¤ë¡£Î㤨¤Ð¡¢¥¹¥ì¥Ã¥É¡Öa¡×¤Î¸å¤Ë¡Ö¤¢¤ë¥¹¥ì¥Ã¥É¡×¤ò¼Â¹Ô¤·¤¿¤¤»þ¤Ë¡¢¡Öa.join()¡×¤È¤¹¤ë»ö¤Ç¡Ö¤¢¤ë¥¹¥ì¥Ã¥É¡×¤ò¡Öa¡×¤¬¼Â¹Ô¤·½ª¤ï¤Ã¤¿¸å¤Ë³¤±¤Æ¼Â¹Ô¤Ç¤­¤ë¡£¤¹¤Ê¤ï¤Á¡¢¡Öa¡×¤¬½ªÎ»¤·¤¿¸å¤Ë¡¢¡Ö¤¢¤ë¥¹¥ì¥Ã¥É¡×¼Â¹Ô¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢join()¥á¥½¥Ã¥É¤ò»È¤¦¡£
    join()¥á¥½¥Ã¥É¤Ï¡¢interruptedException¤òÅꤲ¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢try-catchʸ¤Çµ­½Ò¤¹¤ë¡£

    join()¥á¥½¥Ã¥É¤ÎÎã
    class MyRunnable implements Runnable{
        public void run(){
            for(int i = 1 ; i < 50 ; i++){
                System.out.println(Thread.currentThread().getName()) ;
            }
        }
    }
    class Test{
        public static void main(String[] argsa){
            MyRunnable r = new MyRunnable() ;
            MyRunnable2 r2 = new MyRunnable2() ;
            Thread t1 = new Thread(r) ;
            Thread t2 = new Thread(r) ;
            Thread t3 = new Thread(r) ;
            t1.setName("Thread1") ;
            t2.setName("Thread2") ;
            t3.setName("Thread3") ;
            t1.start() ;
            try{
            t1.join() ;
            }
            catch(InterruptedException ex){}
            t2.start() ;
            try{
            t2.join() ;
            }
            catch(InterruptedException ex){}
            t3.start() ;
        }
    }
    
    

    ¥³¡¼¥É¤ÎƱ´ü²½[°Û¤Ê¤ë¥¹¥ì¥Ã¥É¤¬Æ±¤¸¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀßÄê¥á¥½¥Ã¥É¤Ë¥¢¥¯¥»¥¹¤¹¤ë]
    ¥ê¥¢¥ë¥¿¥¤¥à¤Ëºß¸Ë¤¬ÊÑÆ°¤¹¤ë¤â¤Î¤Ë°Û¤Ê¤ëÆó¿Í¤¬ºß¸Ë¤ò³Îǧ¤·¤Æ¡¢¤½¤Î¸åºß¸Ë¤¬¤¢¤Ã¤¿¾ì¹ç¡¢¹ØÆþ¤¹¤ë¤È¤¤¤¦¥×¥í¥°¥é¥à¤òºîÀ®¤¹¤ë»ö¤Ë¤¹¤ë¡£¤³¤³¤Ç¤Ï¡¢Êõ¤¯¤¸¤ò10Ëçñ°Ì¤ÇÈÎÇ䤷¤Æ¤ª¤ê¡¢10Ëç°Ê¾å¤¢¤Ã¤¿¤é¹ØÆþ¤¹¤ë¤³¤È¤Ë¤¹¤ë¡£°Ê²¼¤ÎÀßÄê¤Ë¤¹¤ë¡£
    1.Êõ¤¯¤¸¤Îºß¸Ë¤ò50Ëç¤È¤¹¤ë¡£¤³¤ÎÊÑ¿ô¤ÏprivateÊÑ¿ô¤È¤¹¤ë¡£
    2.°ì²ó¹ØÆþ¤¹¤ëËè¤Ë¡¢10Ëçºß¸Ë¤ò¸º¤é¤¹¡£
    3.¹ØÆþ¤¹¤ëÁ°¤Ëºß¸Ë³Îǧ¤ò¹Ô¤¦¡£
    4.¹ØÆþ¼Ô¤Ï¡ÖÂÀϺ¡×¤È¡Ö²Ö»Ò¡×¤È¤¹¤ë¡£
    5.ºß¸Ë³Îǧ¤ò¤·¤¿¸å¡¢1ÉÃsleep()¥á¥½¥Ã¥É¤Ç»ß¤á¡¢¹ØÆþ¤¹¤ë¡£

    Êõ¤¯¤¸¹ØÆþ¤ÎÎã
    //Êõ¤¯¤¸ºß¸Ë³Îǧ¥¯¥é¥¹
    class Takara{
        private int zaiko =50 ;//Áíºß¸Ë¿ô
        //ºß¸Ë³Îǧ¥á¥½¥Ã¥É
        public int getNum(){
            return zaiko ;
        }
        //¹ØÆþ¸å¤Îºß¸Ë½èÍý¥á¥½¥Ã¥É
        public void sousu(int amount){
            zaiko = zaiko - amount ;
        }
    }
    
    //¥¹¥ì¥Ã¥É¥¯¥é¥¹¡Ê¥á¥¤¥ó¥¯¥é¥¹¡Ë
    public class Test implements Runnable{
        Takara ta = new Takara() ;
        public static void main(String[] args){
            Test r = new Test() ;
            Thread t1 = new Thread(r) ;
            Thread t2 = new Thread(r) ;
            t1.setName("ÂÀϺ") ;
            t2.setName("²Ö»Ò") ;
            t1.start() ;
            t2.start() ;
        }
        public void run(){
            for(int i = 0 ; i < 5 ; i++){
                //getStock()¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·
                getStock(10) ;
                //ºß¸Ë¤¬0¤Î¾ì¹ç
                if(ta.getNum() < 0){
                    System.out.println("ºß¸Ë¤¬0̤Ëþ¤Î°Ù¡¢¹ØÆþ¤Ç¤­¤Þ¤»¤ó") ;
                }
            }
        }
        //ºß¸Ë³Îǧ¤È¹ØÆþ¥á¥½¥Ã¥É
        private void getStock(int num){
            //ºß¸Ë¿ô¤ò¼èÆÀ¤·¡¢10Ëç°Ê¾å¤¢¤Ã¤¿¾ì¹ç
            if(ta.getNum() >= num){
                System.out.println(Thread.currentThread().getName() + 
                    "¤Ï¡¢¡Öºß¸Ë¤¬½½Ê¬¤Ë¤¢¤ë¤«¤éÇ㤨¤ë¤Ê!¡×¤È»×¤¤¤Þ¤·¤¿¡£") ;
                try{
                    Thread.sleep(1000) ;
                }
                catch(InterruptedException ex){}
                //10Ëç¹ØÆþ¤·¤Æ¡¢Áíºß¸Ë¿ô¤ò¸º¤é¤¹
                ta.sousu(num) ;
                System.out.println(Thread.currentThread().getName() + 
                    "¤Ï¡¢ºß¸Ë¤ò³Îǧ¤·¤¿¤Î¤Ç10ËçÇ㤤¤Þ¤·¤¿") ;
            }
            //ºß¸Ë¤¬Ìµ¤«¤Ã¤¿¾ì¹ç
            else{
                System.out.println(Thread.currentThread().getName() + 
                    "¤Ï¡¢ºß¸Ë¤¬¤Ê¤«¤Ã¤¿¤Î¤Ç¤â¤¦Ç㤨¤Þ¤»¤ó¤Ç¤·¤¿") ;
            }
        }
    }
    
    

    ¤³¤Î¥½¡¼¥¹¤Ç¤Î½ÐÎÏ·ë²Ì¤Ç¤Ï¡¢ÂÀϺ¤È²Ö»Ò¤¬Êõ¤¯¤¸¤ò¹ØÆþ¤¹¤ë¤¬¡¢ÀßÄê¥á¥½¥Ã¥ÉgetStock()¤ËÁÐÊý¤¬¥¢¥¯¥»¥¹¤¹¤ë°Ù¡¢ºß¸Ë³Îǧ¤¬¥¹¥à¡¼¥º¤Ë¹Ô¤ï¤ì¤ººß¸Ë¤¬¤Ê¤¤¤Ë¤â´Ø¤ï¤é¤º¡¢¹ØÆþ¤¹¤ë¤È¤¤¤¦·ë²Ì¤¬µ¯¤³¤Ã¤Æ¤·¤Þ¤¦¡£¤³¤ÎÆ°ºî¤òËɤ°¤¿¤á¤Ë¤Ï¡¢ÀßÄê¥á¥½¥Ã¥ÉgetStock()¤òƱ´ü²½¤¹¤ë»ö¤Ë¤è¤ê¡¢¡Öºß¸Ë³Îǧ¡×¡¦¡Ö¹ØÆþ¡×¤³¤ÎÆó¤Ä¤ÎÆ°ºî¤ò°ì¤Ä¤ÎÆ°ºî¤È¤·¡¢°ì¤Ä¤ÎÆ°ºî¤¬½ª¤ï¤é¤Ê¤¤¤È¡¢Â¾¼Ô¤Ï¡Öºß¸Ë³Îǧ¡×¡¦¡Ö¹ØÆþ¡×¤¬¤ª¤³¤¨¤Ê¤¯¤¹¤ë¤è¤¦¤Ë¤¹¤ë¡£Æ±´ü²½¤¹¤ë¤Ë¤Ï¡¢synchronized¥­¡¼¥ï¡¼¥É¤ò»È¤¦¡£

    ¥á¥½¥Ã¥É¤ÎƱ´ü²½¤ÎÎã
    class Takara{
        private int zaiko =50 ;
        public int getNum(){
            return zaiko ;
        }
        public void sousu(int amount){
            zaiko = zaiko - amount ;
        }
    }
    
    
    public class Test implements Runnable{
        Takara ta = new Takara() ;
        public static void main(String[] args){
            Test r = new Test() ;
            Thread t1 = new Thread(r) ;
            Thread t2 = new Thread(r) ;
            t1.setName("ÂÀϺ") ;
            t2.setName("²Ö»Ò") ;
            t1.start() ;
            t2.start() ;
        }
        public void run(){
            for(int i = 0 ; i < 5 ; i++){
                getStock(10) ;
                if(ta.getNum() < 0){
                    System.out.println("ºß¸Ë¤¬0̤Ëþ¤Î°Ù¡¢¹ØÆþ¤Ç¤­¤Þ¤»¤ó") ;
                }
            }
        }
        private synchronized void getStock(int num){
            if(ta.getNum() >= num){
                System.out.println(Thread.currentThread().getName() + 
                    "¤Ï¡¢¡Öºß¸Ë¤¬½½Ê¬¤Ë¤¢¤ë¤«¤éÇ㤨¤ë¤Ê!¡×¤È»×¤¤¤Þ¤·¤¿¡£") ;
                try{
                    Thread.sleep(1000) ;
                }
                catch(InterruptedException ex){}
                ta.sousu(num) ;
                System.out.println(Thread.currentThread().getName() + 
                    "¤Ï¡¢ºß¸Ë¤ò³Îǧ¤·¤¿¤Î¤Ç10ËçÇ㤤¤Þ¤·¤¿") ;
            }
            else{
                System.out.println(Thread.currentThread().getName() + 
                    "¤Ï¡¢ºß¸Ë¤¬¤Ê¤«¤Ã¤¿¤Î¤Ç¤â¤¦Ç㤨¤Þ¤»¤ó¤Ç¤·¤¿") ;
            }
        }
    }
    
    

    ¾åµ­¤Î¥³¡¼¥É¤Ç¤Ï¡¢¡Öºß¸Ë³Îǧ¡×¡Ö¹ØÆþ¡×¤ÎÆó¤Ä¤¬¡¢°ì¤Ä¤ÎÆ°ºî¤È¤Ê¤Ã¤¿¤Î¤Ç¡¢ºß¸Ë¤¬¤Ê¤¤¾ì¹ç¤Ï¹ØÆþ¤Ç¤­¤Ê¤¯¤Ê¤ë¡£

    Ʊ´ü²½¤È¥Ö¥í¥Ã¥¯
    Ʊ´ü²½¤Ï¥Ö¥í¥Ã¥¯¤Ë¤è¤ê¼Â¸½¤µ¤ì¤Æ¤¤¤ë¡£Java¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ï¥Ö¥í¥Ã¥¯¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¡£¤³¤Îµ¡Ç½¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¤ËƱ´ü¥á¥½¥Ã¥É¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ï¤¸¤á¤ÆºîÍѤ¹¤ë¡£°ì¤Ä¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥Ö¥í¥Ã¥¯¤Ï°ì¸Ä¤À¤±¤Ê¤Î¤Ç¡¢¤¢¤ë¥¹¥ì¥Ã¥É¤¬¥í¥Ã¥¯¤ò¼èÆÀ¤·¤¿¤é¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤ÏƱ´ü¥³¡¼¥É¤ÎÃæ¤ËÆþ¤ì¤Ê¤¤¡£¥í¥Ã¥¯¤¬²ò½ü¤µ¤ì¤¿¸å¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤¬¥í¥Ã¥¯¤ò¼èÆÀ¤·¤ÆƱ´ü¥³¡¼¥ÉÆâ¤ËÆþ¤ì¤ë¡£
  • Ʊ´ü²½¤Ç¤­¤ë¤Î¤Ï¡¢¥á¥½¥Ã¥É¤À¤±¤Ç¤¢¤ë¡£ÊÑ¿ô¤ÏƱ´ü²½¤Ç¤­¤Ê¤¤¡£
  • ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ïɬ¤º¥í¥Ã¥¯¤¬°ì¤Ä¤À¤±ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¡£
  • ¥¯¥é¥¹¤ÎÁ´¤Æ¤òƱ´ü²½¤¹¤ëɬÍפϤʤ¤¡£Æ±´ü²½¤·¤¿¤¤¤â¤Î¤À¤±¡¢Æ±´ü²½¤¹¤ì¤Ð¤è¤¤¡£
  • ¥¯¥é¥¹¤ÎÃæ¤ÇÊ£¿ô¤ÎƱ´ü²½¥á¥½¥Ã¥É¤¬¤¢¤Ã¤¿¾ì¹ç¡¢¤½¤ÎƱ´ü²½¥á¥½¥Ã¥É¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë¤Î¤Ï¡¢°ì¤Ä¤Î¥¹¥ì¥Ã¥É¤À¤±¤Ç¤¢¤ë¡£¤¹¤Ê¤ï¤Á¡¢Æ±´ü²½¥á¥½¥Ã¥ÉƱ»Î¤¬¥ï¥ó¥»¥Ã¥È¤È¹Í¤¨¤ë»ö¤¬¤Ç¤­¤ë¡£
  • Ʊ´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥½¥Ã¥É¤Ï¡¢Ê£¿ô¤Î¥¹¥ì¥Ã¥É¤¬¥¢¥¯¥»¥¹¤Ç¤­¤ë¡£
  • ¥¹¥ì¥Ã¥É¤Ï¤½¤ì¤Þ¤Ç¤Ë¼èÆÀ¤·¤¿¥í¥Ã¥¯¤òÊÝ»ý¤·¤¿¤Þ¤Þ¥¹¥ê¡¼¥×¾õÂ֤ˤʤ롣
  • ¥¹¥ì¥Ã¥É¤ÏÊ£¿ô¤Î¥í¥Ã¥¯¤ò¼èÆÀ¤¹¤ë»ö¤¬¤Ç¤­¤ë¡£¤Þ¤¿¡¢¤¢¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î¥í¥Ã¥¯¤ò¼èÆÀ¤·¤¿¸å¡¢¤½¤Î¥¹¥ì¥Ã¥É¤¬Æ±¤¸¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ¤µ¤é¤ËƱ´ü¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¤â¥¨¥é¡¼¤Ë¤Ê¤é¤Ê¤¤¡£
  • ¥á¥½¥Ã¥ÉÁ´ÂΤǤϤʤ¯¡¢¥³¡¼¥É¥Ö¥í¥Ã¥¯Á´ÂΤòƱ´ü²½¤¹¤ë¤³¤È¤â¤Ç¤­¤ë¡£Æ±´ü²½¤ÏƱ»þ¥¢¥¯¥»¥¹¤òËɤ°¤â¤Î¤À¤«¤é¡¢¥Ç¡¼¥¿¤ÎÊݸî¤òɬÍפȤ·¤Ê¤¤¥³¡¼¥É¤ÏƱ´ü²½¤·¤Ê¤¤¤Û¤¦¤¬¤è¤¤¡£

  • ¥³¡¼¥É¤ÎƱ´ü²½¤ÎÎã
    class Test extends Thread{
        StringBuffer letters;
    
        public Test(StringBuffer s){
            this.letters = s ;
        }
    
        public void run(){
            synchronized(this.letters){
                for(int i = 1 ; i <= 100 ; ++i){
                    System.out.println(letters) ;
                }
                System.out.println() ;
                char temp = letters.charAt(0) ;
                ++temp ;
                letters.setCharAt(0, temp) ;
            }
        }
        public static void main(String[] args){
            StringBuffer sb = new StringBuffer("A") ;
            new Test(sb).start() ;
            new Test(sb).start() ;
            new Test(sb).start() ;
    
        }
    }
    
    

    ¥Ç¥Ã¥É¥í¥Ã¥¯
    2¤Ä¤Î¥¹¥ì¥Ã¥É¤¬¤ª¸ß¤¤¤¬»ý¤Ä¥í¥Ã¥¯¤òÂÔµ¡¤·¤Æ¥Ö¥í¥Ã¥¯¤·¤¢¤Ã¤Æ¤¤¤ë¾õÂ֤λö¡£

    ¥Ç¥Ã¥É¥í¥Ã¥¯¤ÎÎã
    class A{
        void echo(){
            System.out.println("a") ;
        }
        void echo2(){
            System.out.println("A") ;
        }
    }
    class B{
        void echo(){
            System.out.println("b") ;
        }
        void echo2(){
            System.out.println("B") ;
        }
    }
    public class Test{
        public static void main(String[] args){
            A a = new A() ;//¥¤¥ó¥¹¥¿¥ó¥¹À¸À®
            B b = new B() ;//¥¤¥ó¥¹¥¿¥ó¥¹À¸À®
    
            ThreadA t1 = new ThreadA(a,b) ;//¥¹¥ì¥Ã¥É¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À®
            ThreadB t2 = new ThreadB(a,b) ;//¥¹¥ì¥Ã¥É¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À®
            t1.start() ;
            t2.start() ;
            try{
                t1.join() ;
                t2.join() ;
            }catch (InterruptedException ex){ }
            System.out.println("Àµ¾ï¤Ë½ªÎ»") ;
        }
    }
    class ThreadA extends Thread{
        int cnt = 0 ;
        A a;
        B b;
    
        ThreadA(A a, B b){
            this.a = a;
            this.b = b;
        }
    
        void methodA(){
            synchronized(a){//¥ª¥Ö¥¸¥§¥¯¥Èa¤ò¥í¥Ã¥¯
                System.out.println("ThreadA¤«¤é" + (++cnt) + "²óÌÜ") ;
                a.echo() ;
                synchronized(b){//¥ª¥Ö¥¸¥§¥¯¥Èb¤Î²ò½üÂÔ¤Á
                    b.echo2() ;
                    try{
                        sleep(1000) ;
                    } catch(InterruptedException ex){ }
                }
            }
        }
        public void run(){
            for(int i = 0 ; i <= 100 ; i++){
                methodA() ;
            }
        }
    }
    
    
    class ThreadB extends Thread{
        int cnt = 0 ;
        A a;
        B b;
    
        ThreadB(A a, B b){
            this.a = a;
            this.b = b;
        }
    
        void methodB(){
            synchronized(b){//¥ª¥Ö¥¸¥§¥¯¥Èb¤ò¥í¥Ã¥¯
                System.out.println("ThreadB¤«¤é" + (++cnt) + "²óÌÜ") ;
                b.echo() ;
                synchronized(a){//¥ª¥Ö¥¸¥§¥¯¥Èa¤Î²ò½üÂÔ¤Á
                    a.echo2() ;
                    try{
                        sleep(1000) ;
                    } catch(InterruptedException ex){ }
                }
            }
        }
        public void run(){
            for(int i = 0 ; i <= 100 ; i++){
                methodB() ;
            }
        }
    }
    
    

    ¤ª¸ß¤¤¤Î¥¹¥ì¥Ã¥É¤¬¡¢¥í¥Ã¥¯¤Î²ò½ü¤òÂÔ¤Áwait¾õÂ֤ˤʤäƤ·¤Þ¤¦¡£ThreadA¤Ï¡¢ThreadB¤¬¥í¥Ã¥¯¤·¤¿¥ª¥Ö¥¸¥§¥¯¥Èb¤Î²ò½ü¤òÂԤäƤª¤ê¡¢ThreadB¤ÏThreadA¤¬¥í¥Ã¥¯¤·¤¿¥ª¥Ö¥¸¥§¥¯¥Èa¤Î²ò½ü¤òÂԤäƤ¤¤ë¡£

    ¥¹¥ì¥Ã¥É´Ö¤Î¤ä¤ê¤È¤ê
    ¥¹¥ì¥Ã¥É¤Ï¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤È¤ª¸ß¤¤¤Î¥í¥Ã¥¯¾õÂ֤ʤɤξðÊó¤ò¤ä¤ê¤È¤ê¤¹¤ë»ö¤¬¤Ç¤­¤ë¡£java.lang.Object¤Ë¤Ï¡¢wait()¡¢notify()¡¢notifyall()¥á¥½¥Ã¥É¤¬¤¢¤ê¡¢¤³¤ì¤é¤Î¥á¥½¥Ã¥É¤Ï¡¢¥¹¥ì¥Ã¥ÉƱ»Î¤¬¥¤¥Ù¥ó¥È¤Î¾õÂ֤Ǥä¤ê¤È¤ê¤¹¤ë»þ¤ËÌòΩ¤Ä¡£
    wait()¤Ènotify()¥á¥½¥Ã¥É¤Ï¡¢Æ±´ü¥³¥ó¥Æ¥­¥¹¥ÈÆâ¤Ç¸Æ¤Ó½Ð¤¹É¬Íפ¬¤¢¤ë¡£¥¹¥ì¥Ã¥É¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¥í¥Ã¥¯¤ò¼èÆÀ¤·¤Ê¤¤¸Â¤ê¡¢¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤ÆÂÔµ¡¥á¥½¥Ã¥É¤äÄÌÃΥ᥽¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹»ö¤Ï¤Ç¤­¤Ê¤¤¡£

    wait()¥á¥½¥Ã¥É¤Ènotify()¥á¥½¥Ã¥É¤ÎÎã
    class ThreadA{
        public static void main(String[] args){
            ThreadB b = new ThreadB() ;
            b.start() ;
    
            synchronized(b){//¥ª¥Ö¥¸¥§¥¯¥Èb¥í¥Ã¥¯¤Î¼èÆÀ
                try{
                    System.out.println("Waiting for to complete...") ;
                    b.wait() ;//¥í¥Ã¥¯¤ò³«Êü¤·ÂÔµ¡¤¹¤ë
                } catch(InterruptedException ex){ }
            }
            System.out.println("Total is: " + b.total) ;
        }
    }
    
    
    class ThreadB extends Thread{
        int total ;
    
        public void run(){
            synchronized(this){
                for(int i = 0 ; i < 100 ; i++){
                    total += i ;
                }
                notify() ;//¸½ºßÂÔµ¡¤·¤Æ¤¤¤ëǤ°Õ¤Î¥¹¥ì¥Ã¥É¤ËÄÌÃΤòÁ÷¤ë¡£
            }
         }
    }
    
    

    ¤³¤Î¥³¡¼¥É¤Ç¤Ï2¤Ä¤Î¥¹¥ì¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤ë¡£°ì¤Ä¤Ï¥á¥¤¥ó¥¹¥ì¥Ã¥É¡¢¤â¤¦°ì¤Ä¤Ï¥¹¥ì¥Ã¥ÉB¡£¥¹¥ì¥Ã¥ÉB¤Ï¡¢¹ç·×¤òµá¤á¤ë¥¹¥ì¥Ã¥É¤Ç¤¢¤ë¤¬¡¢¹ç·×¤òµá¤á¤ëÁ°¤Ë¥á¥¤¥ó¥¹¥ì¥Ã¥É¤¬¼Â¹Ô¤·¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬¤¢¤ë¡£¤³¤ì¤òÂÇÇˤ¹¤ë°Ù¤Ë¡¢¥¹¥ì¥Ã¥ÉB¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÂÔµ¡¤·¤Æ¤â¤é¤¦¤è¤¦¤Ë¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
    ¤½¤³¤Ç¡¢wait()¥á¥½¥Ã¥É¤Ènotify()¥á¥½¥Ã¥É¤ò»È¤¦¡£wait()¥á¥½¥Ã¥É¤ÇÂÔµ¡¤µ¤»(¥á¥¤¥ó¥¹¥ì¥Ã¥É)¡¢notify()¥á¥½¥Ã¥É¤ÇÂÔµ¡Ãæ¤Î¥¹¥ì¥Ã¥É¤òºÆ³«¤µ¤ì¤ë¡£¤¹¤Ê¤ï¤Á¡¢¥¹¥ì¥Ã¥ÉB¤¬¼Â¹Ô¤·½ª¤ï¤ë¤Þ¤Ç¥á¥¤¥ó¥¹¥ì¥Ã¥É¤òÂÔµ¡¤µ¤»¤¿¤¤¤Î¤Ç¡¢wait()¥á¥½¥Ã¥É¤ÇÂÔµ¡¤µ¤»¡¢notify()¥á¥½¥Ã¥É¤Ç¥í¥Ã¥¯¤ò³«Êü¤¹¤ë¡£
    wait()¥á¥½¥Ã¥É¤änotify()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¥¹¥ì¥Ã¥É¤Ï¡¢¤½¤ÎÂоݤȤʤ륪¥Ö¥¸¥§¥¯¥È¤Î¥í¥Ã¥¯¤ò¼èÆÀ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£wait()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤ÆÂÔµ¡¾õÂ֤ˤʤä¿¥¹¥ì¥Ã¥É¤Ï¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤Î°Ù¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤Î¥í¥Ã¥¯¤ò°ì»þŪ¤Ë³«Êü¤¹¤ë¤¬¡¢ÂÔµ¡¤·¤Æ¤«¤éÉüµ¢¤·¤Æ¼Â¹Ô¤òºÆ³«¤¹¤ë»þ¤Ë¤ÏºÆÅÙ¥í¥Ã¥¯¤ò¼èÆÀ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

    notifyAll()¥á¥½¥Ã¥É
    ÆÃÄê¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÂÔµ¡¤·¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¥¹¥ì¥Ã¥É¤Ë¤Þ¤È¤á¤ÆÄÌÃΤòÁ÷¤ê¤¿¤¤»þ¤ËnotifyAll()¥á¥½¥Ã¥É¤ò»È¤¦¡£notifyAll()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤È¡¢Á´¤Æ¤Î¥¹¥ì¥Ã¥É¤¬ÄÌÃΤò¼õ¤±¼è¤ê¡¢¥í¥Ã¥¯¤ò¼èÆÀ¤·¤è¤¦¤È¶¥Á褬¤Ï¤¸¤Þ¤ë¡£

    notifyAll()¥á¥½¥Ã¥É¤ÎÎã
    class Reader extends Thread{
        Calculator c ;
    
        public Reader(Calculator calc){
            c = calc ;
        }
    
        public void run(){
            synchronized(c) {
                try{
                    System.out.println("Waiting for calculation...") ;
                    c.wait() ;
                } catch(InterruptedException ex){ }
            }
            System.out.println("Total is: " + c.total) ;
        }
    
        public static void main(String[] args) {
            Calculator calculator = new Calculator() ;
            new Reader(calculator).start() ;
            new Reader(calculator).start() ;
            new Reader(calculator).start() ;
            calculator.start() ;
    
        }
    }
    
    
    class Calculator extends Thread{
        int total ;
    
        public void run(){
            synchronized(this){
                for(int i = 0 ; i < 100 ; i++) {
                    total += i ;
                }
                notifyAll() ;
            }
        }
    }
    
    






    Copyright 2007 ¤¿¤á¤Ë¤Ê¤ë¥Û¡¼¥à¥Ú¡¼¥¸ All Rights Reserved.