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
{
Ïà¹ØÎĵµ£º
ʱ¼ä¶¯Ì¬ÏÔʾ
1.·½·¨Ò» ÓÃTimerTask
ÀûÓÃjava.util.TimerºÍjava.util.TimerTaskÀ´×ö¶¯Ì¬¸üУ¬±Ï¾¹Ã¿´Î¸üпÉÒÔ¿´×÷ÊǼÆʱ1Ãë·¢ÉúÒ»´Î¡£
´úÂëÈçÏ£º
import java.awt.Dimension;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util ......
JCP SE/EE Ö´ÐÐίԱ»á
Õýʽ½ÓÊÜÁË
JSR 330
—— Dependency Injection for Java¡£¸Ã¹æ·¶ÓÚ ½ñÄê 5 Ô 9 ÈÕ
ÓÉ Google µÄ Bob Lee ÒÔ¼° SpringSource µÄ Rod Johnson ×÷Ϊ¹æ·¶Áìµ¼Ìá½»¸ø JCP£¬ÏÖÔÚÒѾÕýʽ·¢²¼£¬²»µÃ²»¸Ð̾¸Ã¹æ·¶±ê×¼»¯¹ý³ÌÖ®¿ì¡£ÔÚ ×îÖÕͶƱ½á¹ûÖÐ
£¬14 Ʊͨ¹ý£¬1 ƱδͶ£¬1 Ʊ·´¶Ô¡£
J ......
1 JDK5.0°üÀ¨µÄµ÷ÊÔ¹¤¾ß
ÎÒÃÇÔÚÕâÀï¶ÔJDK5.0µÄµ÷ÊÔ¹¤¾ß×ö´óÖµĸÅÄîÐԵĽéÉÜ£¬È»ºóÏ£Íûͨ¹ý½éÉÜÎÒ×Ô¼ºÔÚʵ¼Ê¹¤×÷ÖÐʹÓÃÕâЩ¹¤¾ß½â¾öÎÊÌâµÄʵÀýÀ´Èôó¼Ò¶ÔÕâЩ¹¤¾ßÓиüÉîÈëµÄÁ˽⡣
¡¡JDK5.0ÀïÃæ¼ÓÈëÁËjstack, jconsole, jinfo, jmap, jdb, jstat, jps, ÏÂÃæ¶ÔÕâЩ¹¤¾ß×ö¼òµ¥½éÉÜ£º
¡¡jstack -- Èç¹ûjava³Ì ......
Bean Serializable Interface µÄ½Ó¿ÚÈÃBEAN¿ÉÒÔ´®Ðл¯£¬½«Æä±ä³ÉÒ»¸ö¿É±£´æΪÒÔºóʹÓõĶþ½øÖÆÁ÷¡£µ±Ò»¸öBEAN±»ÏµÁл¯µ½´ÅÅÌÉÏ»òÕßÆäËûÈκεط½£¬Æä״̬±»±£´æÆðÀ´£¬ÆäÖеÄÊôÐÔÖµÒ²²»»á¸Ä±ä¡£ÔÚBEANµÄ¹æ·¶ÖУ¬JSP²¢Ã»ÓÐÒªÇóBEANʵÏÖSerializable½Ó¿Ú¡£µ«ÊÇ£¬Èç¹ûÄúÏ£Íû×Ô¼º¿ØÖÆÄúËù´´½¨µÄ×é¼þµÄserialization½ø³Ì£¬»òÕßÄúÏë ......
¼òµ¥µÄ˵µ¥Àý¾ÍÊÇ Ö»ÄÜÓÐÒ»¸öʵÀý£¬ËùÒԵط½Óõ½µÄʵÀý¶¼ÊÇͬһ¸ö¡£
¾ÍºÃÏñ¼ÒÈ˳Է¹£¬×À×ÓÊǵ¥ÀýµÄ£¬´ó¼ÒÓõÄÊÇͬһ¸ö¡£¶øÍëÊǶàÀýµÄ£¬Ã¿È˶¼ÓÐ×Ô¼¸µÄ¡£ ÏÂÃæÊǾßÌåµÄÀý×Ó£º
Javaģʽ֮µ¥Àýģʽ£º
µ¥Àýģʽȷ±£Ò»¸öÀàÖ»ÓÐÒ»¸öʵÀý£¬×ÔÐÐÌṩÕâ¸öʵÀý²¢ÏòÕû¸öÏµÍ ......