|
¤Ê¤ó¤È¤Ê¤¯¡¢¸å²ó¤·¤Ë¤·¤Æ¤¤¿¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¥×¥í¥°¥é¥ß¥ó¥°¤Ê¤ó¤Ç¤¹¤¬¡¢SWT¤ÎÊÙ¶¯¤Ê¤ÉGUI¥×¥í¥°¥é¥ß¥ó¥°¤ò¤ä¤Ã¤Æ¤ë¤È¡¢¤É¤¦¤·¤Æ¤âÃ챤¬É¬ÍפÀ¤Ê¤Ã¤Æ»×¤¨¤Æ¤¤Þ¤·¤Æ¡¢¤Á¤ç¤Ã¤ÈÊÙ¶¯Ãæ¤Ç¤¹¡£ ¤Þ¤ÀÁ´Á³¤ï¤«¤Ã¤Æ¤Ê¤¤¤ó¤Ç¤¹¤¬¡¢¤¤¤í¤¤¤í¥á¥â¡£ InterruptedException? ¤¬È¯À¸¤¹¤ë¥¿¥¤¥ß¥ó¥° †ÅÓÃæ¡£ synchronized¤Ë¤¹¤ë¤³¤È¤Ç¡¢¤É¤³¤¬Æ±´ü²½¤µ¤ì¤ë¤Î¤«¡£ †²¼¤Î¥¯¥é¥¹¤Ïsynchronized¤Î¥á¥½¥Ã¥É¤È¤½¤¦¤Ç¤Ê¤¤¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡£ public class Data {
public synchronized void syncExecute() {
System.out.println("syncExecute¼Â¹ÔÃæ......");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("syncExecute¼Â¹Ô½ªÎ»");
}
public void execute() {
System.out.println("execute¼Â¹Ô");
}
}
¤½¤ì¤¾¤ì¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¥¹¥ì¥Ã¥É¤¬¤¢¤ë¤È¤·¤Þ¤¹¡£ class SyncThread extends Thread {
private Data data;
public SyncThread(Data data) {
this.data = data;
}
public void run() {
data.syncExecute();
}
}
class TestThread extends Thread {
private Data data;
public TestThread(Data data) {
this.data = data;
}
public void run() {
data.execute();
}
}
¤³¤Î¥¹¥ì¥Ã¥É¤òƱ»þ¤Ë¼Â¹Ô¤¹¤ë¤È¡¢ public class ThreadTest{
public static void main(String[] args) {
System.out.println("Start.");
Data data = new Data();
new SyncThread(data).start();
new TestThread(data).start();
System.out.println("End.");
}
}
·ë²Ì¤Ï Start. End. syncExecute¼Â¹ÔÃæ...... execute¼Â¹Ô <- syncExecute¼Â¹ÔÃæ¤Ë¤â¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë syncExecute¼Â¹Ô½ªÎ» ¤Ã¤Æ¤Ê¤Ã¤Æ¡¢synchronized ¤Ê¥á¥½¥Ã¥É¤ò¼Â¹ÔÃæ¤Ë¤â¤½¤Î¾¤Î¥á¥½¥Ã¥É¤Ï¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ã¤Æ¤³¤È¤ÏÊ̤Υ¹¥ì¥Ã¥É¤¬¤¢¤ë¥¤¥ó¥¹¥¿¥ó¥¹¤Î¥â¥Ë¥¿¤ò¼èÆÀ¤·¤Æ¤¤¤ë»þ¤â¡¢¡Ösynchronized¤Ç¤Ê¤¤¡×¾¤Î¥á¥½¥Ã¥É¤Ï¼Â¹Ô¤µ¤ì¤ë¤Ã¤Æ»ö¤Ê¤ó¤Ç¤¹¤Í¡£ ¤ó¤Ç¤Ï¡¢Àè¤Û¤É¤Î¥á¥½¥Ã¥É¤ò public void execute() {
-> public synchronized void execute() {
¤ËÊѹ¹¤¹¤ë¤È¡¢ Start. End. syncExecute¼Â¹ÔÃæ...... syncExecute¼Â¹Ô½ªÎ» execute¼Â¹Ô ¤È¤Ê¤ê¡¢Æ±»þ¤Ë¤Ï¼Â¹Ô¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¤¢¤ë°ì»þÅÀ¤Ç¡¢¤Ò¤È¤Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ËÂФ·¤Æ¼Â¹Ô¤µ¤ì¤Æ¤¤¤ësynchronized ¥á¥½¥Ã¥É¤Ï¤Ò¤È¤Ä¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹*1¡£¤µ¤é¤ËThread#sleep()¤·¤Æ¤â¥â¥Ë¥¿¤Ï²òÊü¤·¤Ê¤¤¤È¤¤¤¦¤³¤È¤âʬ¤«¤ê¤Þ¤·¤¿*2¡£ ¤Þ¤È¤á¤ë¤È¡¢ synchronized¥á¥½¥Ã¥É¤Ï¥â¥Ë¥¿¤ò¤È¤é¤Ê¤¤¤È¼Â¹Ô¤Ç¤¤Ê¤¤¡£ ¤Ã¤Æ¤³¤È¤Ç¤¹¤Í*3¡£¤Ê¤ó¤À¤«Åö¤¿¤êÁ°¤Î·ëÏÀ¤Ë¹Ô¤Ã夤ޤ·¤¿¡£¡£ Thread#sleep()¤ÈObject#wait() †¾å¤Î·ëÏÀ¤è¤ê¡¢ Thread#sleep() ¤·¤¿¤È¤¤Ë¥â¥Ë¥¿¤Ï²òÊü¤·¤Ê¤¤ Object#wait() ¤·¤¿¤È¤¤Ë¥â¥Ë¥¿¤Ï²òÊü¤µ¤ì¤ë ¤È¤Ê¤ê¤Þ¤¹¡£ ¤½¤â¤½¤âThread#sleep()¤Ï¥â¥Ë¥¿¤ò¼è¤é¤Ê¤¯¤Æ¤â¼Â¹Ô²Äǽ¤Ê¤Î¤Ç¡¢¥â¥Ë¥¿¤Î²òÊü¤â²¿¤â¤Ê¤¤¤ï¤±¤Ç¤¹¡£¤Þ¤¿Object#wait()¤ò¸Æ¤Ö¥¹¥ì¥Ã¥É¤Ï¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Î¥â¥Ë¥¿¤ò¼èÆÀ¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢wait()¤ò¸Æ¤Ó½Ð¤·¤¿½Ö´Ö¤½¤Î¥¹¥ì¥Ã¥É¤Ï¥À¥ó¥Þ¥ê¤Ë¤Ê¤ë¤ï¤±¤Ç¡¢¤½¤³¤Ç¥â¥Ë¥¿¤ò²òÊü¤·¤Ê¤¤¤È¡¢Ã¯¤â¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ÎnotfyAll()¤ò¸Æ¤Ù¤Ê¤¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤³¤Îµ»ö¤Ï
¸½ºß¤Î¥¢¥¯¥»¥¹:4821 |