TOP > Java > ¥¹¥ì¥Ã¥É |
¥¹¥ì¥Ã¥É
Java¤Ç¤Ï2¤Ä¤Î°ÕÌ£¤ÇÍѤ¤¤é¤ì¤ë¡£
java.lang.Thread¤Ï¤¿¤À¤Î¥ª¥Ö¥¸¥§¥¯¥È¡£¼Â¹Ô¥¹¥ì¥Ã¥É¤Ï¡¢Æȼ«¤Î¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤òÈ÷¤¨¤¿ÆÈΩ¤·¤¿¥×¥í¥»¥¹¡£Java¤Ç¤Ï¡¢°ì¤Ä¤Î¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤Ë°ì¤Ä¤Î¥¹¥ì¥Ã¥É¤¬Â¸ºß¤¹¤ë¡£Î㤨¤Ð¡¢main()¥á¥½¥Ã¥É¤Ï¡Ö¥á¥¤¥ó¥¹¥ì¥Ã¥É¡×¤È¸Æ¤Ð¤ì¤ë°ì¤Ä¤Î¥¹¥ì¥Ã¥ÉÆâ¤Ç¼Â¹Ô¤µ¤ì¤ë¡£
¿·¤·¤¤¥¹¥ì¥Ã¥É¤òºîÀ®¤¹¤ë¤È¡¢¤¹¤°¤Ë¥³¡¼¥ë¥¹¥¿¥Ã¥¯¤¬³ÎÊݤµ¤ì¡¢¤½¤Î¿·¤·¤¤¥¹¥ì¥Ã¥É¤«¤é¼Â¹Ô¤µ¤ì¤¿¥á¥½¥Ã¥É¤Ï¡¢¤½¤ÎÆȼ«¤Î¥³¡¼¥ë¥¹¥¿¥Ã¥¯Æâ¤ÇÆ°ºî¤¹¤ë¡£
¥¹¥ì¥Ã¥É¤Ë´Ø¤·¤Æ°ìÈÖÃí°Õ¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¤Î¤Ï¡¢¡Ö¥¹¥ì¥Ã¥É¤Ë´Ø¤·¤ÆÊݾ㤵¤ì¤Æ¤¤¤ë»ö¤Ï²¿°ì¤Ä¤Ê¤¤¡×¤È¤¤¤¦¤³¤È¡£
¥¹¥ì¥Ã¥É¤ÎºîÀ®
Java¤Î¥¹¥ì¥Ã¥É¤Ï¡¢java.lang.Thread¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤È¤·¤ÆºîÀ®¤µ¤ì¤ë¡£¥¹¥ì¥Ã¥É¤Î½èÍý¤Ïrun()¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹»ö¤Ë¤è¤ê¤Ï¤¸¤Þ¤ë¡£¹Ô¤¤¤¿¤¤ºî¶È¤ò¡Ö¥¸¥ç¥Ö¡×¤È¤¤¤¦¡£
¥¹¥ì¥Ã¥É¤ÎÄêµÁ
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Äê¿ô]
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. |