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³Ì ......
1 ÍøÂçͨÐŵı¾ÖÊÊǽø³Ì¼äͨÐÅ¡£
2 TcpÐÒéºÍUDPÐÒé
TCP£º¿ªÏú´ó£¬ÓÃÓÚ¿É¿¿ÐÔÒªÇó¸ßµÄ³¡ºÏ¡£
TCPµÄ¹ý³ÌÏ൱ÓÚ´òµç»°µÄ¹ý³Ì
UDP£ºÓÃÔÚ¶ÔʵʱÐÔÒªÇó±È½Ï¸ßµÄ³¡ºÏ¡£
UDPµÄ¹ý³ÌÏ൱ÓÚдÐŵĹý³Ì¡£
×¢Ò⣺socketÊÇÌ×½Ó×Ö£¬ipºÍport£¨¶Ë¿ÚºÅ 0~65535¸ö¶Ë¿Ú£¬Ò»¸ö¶Ë¿ÚÖ»ÄÜÓÐÒ»¸ö½ø³Ì£©
3£¬   ......
Ê×ÏÈһЩ±»³õʼ»¯¶ÔÏóµÄ¸ÅÄ
Àà±äÁ¿£¨Àྲ̬³ÉÔ±£©£º Àà±»¼ÓÔØÊ±²úÉú£»ËüµÄÉú´æÆÚÊÇÀàµÄÉú´æÆÚ£»×Ô¶¯³õʼ»¯£¨Àà±»¼ÓÔØ£©
³ÉÔ±±äÁ¿£¨Àà³ÉÔ±£©£º ÔÚʹÓÃnew´´½¨¸ÃÀàʵÀýʱ²úÉú£»ËüµÄÉú´æÆÚÓë¸ÃÀàʵÀý¶ÔÏóµÄÉú´æÆÚÏàͬ£»
×Ô¶¯³õʼ»¯£¨¹¹Ôì·½·¨±»µ÷Óã©
¾Ö²¿±äÁ¿£¨ÀàµÄ·½·¨ÖеıäÁ¿£©£º ¸Ã·½·¨±»µ÷ÓÃÊ ......