javaÖеÄËø³ØºÍµÈ´ý³Ø
ÔÚjavaÖУ¬Ã¿¸ö¶ÔÏó¶¼ÓÐÁ½¸ö³Ø£¬Ëø(monitor)³ØºÍµÈ´ý³Ø
wait() ,notifyAll(),notify() Èý¸ö·½·¨¶¼ÊÇObjectÀàÖеķ½·¨.
Ëø³Ø:¼ÙÉèÏß³ÌAÒѾӵÓÐÁËij¸ö¶ÔÏó(×¢Òâ:²»ÊÇÀà)µÄËø£¬¶øÆäËüµÄÏß³ÌÏëÒªµ÷ÓÃÕâ¸ö¶ÔÏóµÄij¸ösynchronized·½·¨(»òÕßsynchronized¿é)£¬ÓÉÓÚÕâЩÏß³ÌÔÚ½øÈë¶ÔÏóµÄsynchronized·½·¨Ö®Ç°±ØÐëÏÈ»ñµÃ¸Ã¶ÔÏóµÄËøµÄÓµÓÐȨ£¬µ«ÊǸöÔÏóµÄËøÄ¿Ç°Õý±»Ïß³ÌAÓµÓУ¬ËùÒÔÕâЩÏ߳̾ͽøÈëÁ˸öÔÏóµÄËø³ØÖС£
µÈ´ý³Ø:¼ÙÉèÒ»¸öÏß³ÌAµ÷ÓÃÁËij¸ö¶ÔÏóµÄwait()·½·¨£¬Ïß³ÌA¾Í»áÊͷŸöÔÏóµÄËø(ÒòΪwait()·½·¨±ØÐë³öÏÖÔÚsynchronizedÖУ¬ÕâÑù×ÔÈ»ÔÚÖ´ÐÐwait()·½·¨Ö®Ç°Ïß³ÌA¾ÍÒѾӵÓÐÁ˸öÔÏóµÄËø)£¬Í¬Ê±Ïß³ÌA¾Í½øÈëµ½Á˸öÔÏóµÄµÈ´ý³ØÖС£Èç¹ûÁíÍâµÄÒ»¸öÏ̵߳÷ÓÃÁËÏàͬ¶ÔÏóµÄnotifyAll()·½·¨£¬ÄÇô´¦ÓڸöÔÏóµÄµÈ´ý³ØÖеÄÏ߳̾ͻáÈ«²¿½øÈë¸Ã¶ÔÏóµÄËø³ØÖУ¬×¼±¸Õù¶áËøµÄÓµÓÐȨ¡£Èç¹ûÁíÍâµÄÒ»¸öÏ̵߳÷ÓÃÁËÏàͬ¶ÔÏóµÄnotify()·½·¨£¬ÄÇô½ö½öÓÐÒ»¸ö´¦ÓڸöÔÏóµÄµÈ´ý³ØÖеÄÏß³Ì(Ëæ»ú)»á½øÈë¸Ã¶ÔÏóµÄËø³Ø.
ÏÂÃæÍ¨¹ýÒ»¸öÀý×ÓÀ´ËµÃ÷:
ÒªÇóдÁ½¸öỊ̈߳¬Ò»¸öÏ߳̽«Ä³¸ö¶ÔÏóµÄij¸ö³ÉÔ±±äÁ¿µÄÖµ¼Ó1£¬¶øÁíÍâÒ»¸öÏ߳̽«Õâ¸ö³ÉÔ±±äÁ¿µÄÖµ¼õ1.ʹµÃ¸Ã±äÁ¿µÄֵʼÖÕ´¦ÓÚ[0,2].³õʼֵΪ0.
package com.tju;
class Target
{
private int count;
public synchronized void increase()
{
if(count == 2)
{
try
{
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
count++;
System.out.println(Thread.currentThread().getName() + ":" + count);
notify();
}
public synchronized void decrease()
{
if(count == 0)
{
try
{
//µÈ´ý£¬ÓÉÓÚDecreaseÏ̵߳÷Óõĸ÷½·¨,
//ËùÒÔDecreaseÏ߳̽øÈë¶ÔÏót(mainº¯ÊýÖÐʵÀý»¯µÄ)µÄµÈ´ý³Ø£¬²¢ÇÒÊͷŶÔÏótµÄËø
wait();//ObjectÀàµÄ·½·¨
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
count--;
System.out.println(Thread.currentThread().getName() + ":" + count);
//»½ÐÑÏß³ÌIncrease£¬IncreaseÏ̴߳ӵȴý³Øµ½Ëø³Ø
notify();
}
}
class Increase extends Thread
{
private Target t;
public Increase(Target t)
{
this.t = t;
}
@Override
public void run()
{
for(int i = 0 ;i < 30; i++)
{
try
{
Ïà¹ØÎĵµ£º
¶ÔÓÚѧϰstaticÎÒÃÇÏÈÀ´¿´Á½¸öÀý×Ó£º
//Example 1 Tst.java£¬no main() method
package com.blogchina.qb2049;
public class Tst
{
static { System.out.println("111111"); }
}
ÔËÐнá¹ûΪ: 111111
Exception in thread "main" java.lang.NoSuchMethodError: main
ͬÑùµÄµÀÀí¿´µÚ¶þ ......
1.Listת»»³ÉΪÊý×é¡££¨ÕâÀïµÄListÊÇʵÌåÊÇArrayList)
µ÷ÓÃArrayListµÄtoArray·½·¨¡£
Àý£ºString[] arr = (String[])list.toArray(new String[size]);
2.Êý×éת»»³ÉΪList¡£
µ÷ÓÃArraysµÄasList·½·¨¡£
Àý£ºList stooges = Arrays.asList("Larry", "Moe", "Curly"); ......
1 JDK5.0°üÀ¨µÄµ÷ÊÔ¹¤¾ß
ÎÒÃÇÔÚÕâÀï¶ÔJDK5.0µÄµ÷ÊÔ¹¤¾ß×ö´óÖµĸÅÄîÐԵĽéÉÜ£¬È»ºóÏ£Íûͨ¹ý½éÉÜÎÒ×Ô¼ºÔÚʵ¼Ê¹¤×÷ÖÐʹÓÃÕâЩ¹¤¾ß½â¾öÎÊÌâµÄʵÀýÀ´Èôó¼Ò¶ÔÕâЩ¹¤¾ßÓиüÉîÈëµÄÁ˽⡣
¡¡JDK5.0ÀïÃæ¼ÓÈëÁËjstack, jconsole, jinfo, jmap, jdb, jstat, jps, ÏÂÃæ¶ÔÕâЩ¹¤¾ß×ö¼òµ¥½éÉÜ£º
¡¡jstack -- Èç¹ûjava³Ì ......
Java±à³ÌÄÇЩʶù52—·½·¨ÉùÃ÷
µÚÆßÕÂ ·½·¨
·½·¨µÄÀ´Ô´
·½·¨µÄ¸ÅÄîÀ´Ô´ÓÚÊýѧÉϵĺ¯Êý£¬ÔÚÊýѧÖУ¬µ±Êý¾Ý¾ßÓÐÒ»¶¨µÄ¹æÂÉʱ£¬¾ÍÊÇÓÃÒ»¸öº¯ÊýÀ´´úÂë¸ÃÊý×ֵĹæÂÉ£¬ÀýÈçf£¨n£©=nÔò´ú±í1¡¢2¡¢3¡¢……ÕâÑùµÄÒ»¸öÊýÁС£ÔÚÊýѧÉÏnÊDzÎÊý£¬¶ÔÓÚÈ·¶¨µÄnÖµÖ»ÓÐÒ»¸öf£¨n£©µÄÖµºÍËü¶ÔÓ¦
·½·¨ÊÇÒ»×éΪÁËʵÏÖÌØ¶¨¹¦Ä ......