JavaỊ̈߳ºÐÂÌØÕ÷-Ëø£¨ÉÏ£©
ÔÚJava5ÖУ¬×¨ÃÅÌṩÁËËø¶ÔÏó£¬ÀûÓÃËø¿ÉÒÔ·½±ãµÄʵÏÖ×ÊÔ´µÄ·âËø£¬ÓÃÀ´¿ØÖƶԾºÕù×ÊÔ´²¢·¢·ÃÎʵĿØÖÆ£¬ÕâЩÄÚÈÝÖ÷Òª¼¯ÖÐÔÚjava.util.concurrent.locks °üÏÂÃæ£¬ÀïÃæÓÐÈý¸öÖØÒªµÄ½Ó¿ÚCondition¡¢Lock¡¢ReadWriteLock¡£
Condition
Condition ½« Object ¼àÊÓÆ÷·½·¨£¨wait¡¢notify ºÍ notifyAll£©·Ö½â³É½ØÈ»²»Í¬µÄ¶ÔÏó£¬ÒÔ±ãͨ¹ý½«ÕâЩ¶ÔÏóÓëÈÎÒâ Lock ʵÏÖ×éºÏʹÓã¬ÎªÃ¿¸ö¶ÔÏóÌṩ¶à¸öµÈ´ý set £¨wait-set£©¡£
Lock
Lock ʵÏÖÌṩÁ˱ÈʹÓà synchronized ·½·¨ºÍÓï¾ä¿É»ñµÃµÄ¸ü¹ã·ºµÄËø¶¨²Ù×÷¡£
ReadWriteLock
ReadWriteLock ά»¤ÁËÒ»¶ÔÏà¹ØµÄËø¶¨£¬Ò»¸öÓÃÓÚÖ»¶Á²Ù×÷£¬ÁíÒ»¸öÓÃÓÚдÈë²Ù×÷¡£
ÓйØËøµÄ½éÉÜ,APIÎĵµ½â˵ºÜ¶à£¬¿´µÃºÜ·³£¬»¹ÊÇ¿´¸öÀý×ÓÔÙ¿´Îĵµ±È½ÏÈÝÒ×Àí½â¡£
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* JavaỊ̈߳ºËø
*
* @author leizhimin 2009-11-5 10:57:29
*/
public class Test {
&n ......
JavaỊ̈߳ºÐÂÌØÕ÷-Ëø£¨Ï£©
ÔÚÉÏÎÄÖÐÌáµ½ÁËLock½Ó¿ÚÒÔ¼°¶ÔÏó£¬Ê¹ÓÃËü£¬ºÜÓÅÑŵĿØÖÆÁ˾ºÕù×ÊÔ´µÄ°²È«·ÃÎÊ£¬µ«ÊÇÕâÖÖËø²»Çø·Ö¶Áд£¬³ÆÕâÖÖËøÎªÆÕÍ¨Ëø¡£ÎªÁËÌá¸ßÐÔÄÜ£¬JavaÌṩÁ˶ÁÐ´Ëø£¬ÔÚ¶ÁµÄµØ·½Ê¹ÓöÁËø£¬ÔÚдµÄµØ·½Ê¹ÓÃÐ´Ëø£¬Áé»î¿ØÖÆ£¬ÔÚÒ»¶¨³Ì¶ÈÉÏÌá¸ßÁ˳ÌÐòµÄÖ´ÐÐЧÂÊ¡£
JavaÖжÁÐ´ËøÓиö½Ó¿Újava.util.concurrent.locks.ReadWriteLock£¬Ò²ÓоßÌåµÄʵÏÖReentrantReadWriteLock£¬ÏêϸµÄAPI¿ÉÒԲ鿴JavaAPIÎĵµ¡£
ÏÂÃæÕâ¸öÀý×ÓÊÇÔÚÎÄÀý×ӵĻù´¡ÉÏ£¬½«ÆÕÍ¨Ëø¸ÄΪ¶ÁÐ´Ëø£¬²¢Ìí¼ÓÕË»§Óà¶î²éѯµÄ¹¦ÄÜ£¬´úÂëÈçÏ£º
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* JavaỊ̈߳ºËø
*
* @author leizhimin 2009-11-5 10:57:29
*/
public class Test {
public static void main(String[] args) {
//´´½ ......
JavaỊ̈߳ºÐÂÌØÕ÷-ÐźÅÁ¿
JavaµÄÐźÅÁ¿Êµ¼ÊÉÏÊÇÒ»¸ö¹¦ÄÜÍê±ÏµÄ¼ÆÊýÆ÷£¬¶Ô¿ØÖÆÒ»¶¨×ÊÔ´µÄÏû·ÑÓë»ØÊÕÓÐןÜÖØÒªµÄÒâÒ壬ÐźÅÁ¿³£³£ÓÃÓÚ¶àÏ̵߳ĴúÂëÖУ¬²¢ÄÜ¼à¿ØÓжàÉÙÊýÄ¿µÄÏ̵߳ȴý»ñÈ¡×ÊÔ´£¬²¢ÇÒͨ¹ýÐźÅÁ¿¿ÉÒÔµÃÖª¿ÉÓÃ×ÊÔ´µÄÊýÄ¿µÈµÈ£¬ÕâÀï×ÜÊÇÔÚÇ¿µ÷“ÊýÄ¿”¶þ×Ö£¬µ«²»ÄÜÖ¸³öÀ´ÓÐÄÄЩÔڵȴý£¬ÄÄЩ×ÊÔ´¿ÉÓá£
Òò´Ë£¬±¾ÈËÈÏΪ£¬Õâ¸öÐźÅÁ¿ÀàÈç¹ûÄÜ·µ»ØÊýÄ¿£¬»¹ÄÜÖªµÀÄÄЩ¶ÔÏóÔڵȴý£¬ÄÄЩ×ÊÔ´¿ÉʹÓ㬾ͷdz£ÍêÃÀÁË£¬½ö½öÄõ½ÕâЩ¸ÅÀ¨ÐÔµÄÊý×Ö£¬¶Ô¾«È·¿ØÖÆÒâÒå²»ÊǺܴó¡£Ä¿Ç°»¹Ã»Ïëµ½¸üºÃµÄÓ÷¨¡£
ÏÂÃæÊÇÒ»¸ö¼òµ¥Àý×Ó£º
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
/**
* JavaỊ̈߳ºÐÂÌØÕ÷-ÐźÅÁ¿
*
* @author leizhimin 2009-11-5 13:44:45
*/
public class Test {
public static void main(String[] args) {
MyPool myPool = new MyPool(20);
&nb ......
JavaỊ̈߳ºÐÂÌØÕ÷-×èÈû¶ÓÁÐ
×èÈû¶ÓÁÐÊÇJava5Ïß³ÌÐÂÌØÕ÷ÖеÄÄÚÈÝ£¬Java¶¨ÒåÁË×èÈû¶ÓÁеĽӿÚjava.util.concurrent.BlockingQueue£¬×èÈû¶ÓÁеĸÅÄîÊÇ£¬Ò»¸öÖ¸¶¨³¤¶ÈµÄ¶ÓÁУ¬Èç¹û¶ÓÁÐÂúÁË£¬Ìí¼ÓÐÂÔªËØµÄ²Ù×÷»á±»×èÈûµÈ´ý£¬Ö±µ½ÓпÕλΪֹ¡£Í¬Ñù£¬µ±¶ÓÁÐΪ¿Õʱºò£¬ÇëÇó¶ÓÁÐÔªËØµÄ²Ù×÷ͬÑù»á×èÈûµÈ´ý£¬Ö±µ½ÓпÉÓÃÔªËØÎªÖ¹¡£
ÓÐÁËÕâÑùµÄ¹¦ÄÜ£¬¾ÍΪ¶àÏ̵߳ÄÅŶӵȺòµÄÄ£ÐÍʵÏÖ¿ª±ÙÁ˱ã½ÝͨµÀ£¬·Ç³£ÓÐÓá£
java.util.concurrent.BlockingQueue¼Ì³ÐÁËjava.util.Queue½Ó¿Ú£¬¿ÉÒԲο´APIÎĵµ¡£
ÏÂÃæ¸ø³öÒ»¸ö¼òµ¥Ó¦ÓõÄÀý×Ó£º
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
/**
* JavaỊ̈߳ºÐÂÌØÕ÷-×èÈû¶ÓÁÐ
*
* @author leizhimin 2009-11-5 14:59:15
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
BlockingQueue bqueue = new ArrayBlockingQueue(20);
&nb ......
JavaỊ̈߳ºÐÂÌØÕ÷-×èÈûÕ»
¶ÔÓÚ×èÈûÕ»£¬Óë×èÈû¶ÓÁÐÏàËÆ¡£²»Í¬µãÔÚÓÚÕ»ÊÇ“ºóÈëÏȳö”µÄ½á¹¹£¬Ã¿´Î²Ù×÷µÄÊÇÕ»¶¥£¬¶ø¶ÓÁÐÊÇ“ÏȽøÏȳö”µÄ½á¹¹£¬Ã¿´Î²Ù×÷µÄÊǶÓÁÐÍ·¡£
ÕâÀïÒªÌØ±ð˵Ã÷Ò»µãµÄÊÇ£¬×èÈûÕ»ÊÇJava6µÄÐÂÌØÕ÷¡£¡¢
JavaΪ×èÈûÕ»¶¨ÒåÁ˽ӿڣºjava.util.concurrent.BlockingDeque£¬ÆäʵÏÖÀàÒ²±È½Ï¶à£¬¾ßÌå¿ÉÒԲ鿴JavaAPIÎĵµ¡£
ÏÂÃæ¿´Ò»¸ö¼òµ¥Àý×Ó£º
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
/**
* JavaỊ̈߳ºÐÂÌØÕ÷-×èÈûÕ»
*
* @author leizhimin 2009-11-5 15:34:29
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
BlockingDeque bDeque = new LinkedBlockingDeque(20);
for (int i = 0; i < 30; i++) {
&nbs ......
JavaỊ̈߳ºÐÂÌØÕ÷-Ìõ¼þ±äÁ¿
Ìõ¼þ±äÁ¿ÊÇJava5Ïß³ÌÖкÜÖØÒªµÄÒ»¸ö¸ÅÄ¹ËÃû˼Ò壬Ìõ¼þ±äÁ¿¾ÍÊDZíʾÌõ¼þµÄÒ»ÖÖ±äÁ¿¡£µ«ÊDZØÐë˵Ã÷£¬ÕâÀïµÄÌõ¼þÊÇûÓÐʵ¼Êº¬ÒåµÄ£¬½ö½öÊǸö±ê¼Ç¶øÒÑ£¬²¢ÇÒÌõ¼þµÄº¬ÒåÍùÍùͨ¹ý´úÂëÀ´¸³ÓèÆäº¬Òå¡£
ÕâÀïµÄÌõ¼þºÍÆÕͨÒâÒåÉϵÄÌõ¼þ±í´ïʽÓÐ×ÅÌìÈÀÖ®±ð¡£
Ìõ¼þ±äÁ¿¶¼ÊµÏÖÁËjava.util.concurrent.locks.Condition½Ó¿Ú£¬Ìõ¼þ±äÁ¿µÄʵÀý»¯ÊÇͨ¹ýÒ»¸öLock¶ÔÏóÉϵ÷ÓÃnewCondition()·½·¨À´»ñÈ¡µÄ£¬ÕâÑù£¬Ìõ¼þ¾ÍºÍÒ»¸öËø¶ÔÏó°ó¶¨ÆðÀ´ÁË¡£Òò´Ë£¬JavaÖеÄÌõ¼þ±äÁ¿Ö»ÄܺÍËøÅäºÏʹÓã¬À´¿ØÖƲ¢·¢³ÌÐò·ÃÎʾºÕù×ÊÔ´µÄ°²È«¡£
Ìõ¼þ±äÁ¿µÄ³öÏÖÊÇΪÁ˸ü¾«Ï¸¿ØÖÆÏ̵߳ȴýÓ뻽ÐÑ£¬ÔÚJava5֮ǰ£¬Ï̵߳ĵȴýÓ뻽ÐÑÒÀ¿¿µÄÊÇObject¶ÔÏóµÄwait()ºÍnotify()/notifyAll()·½·¨£¬ÕâÑùµÄ´¦Àí²»¹»¾«Ï¸¡£
¶øÔÚJava5ÖУ¬Ò»¸öËø¿ÉÒÔÓжà¸öÌõ¼þ£¬Ã¿¸öÌõ¼þÉÏ¿ÉÒÔÓжà¸öÏ̵߳ȴý£¬Í¨¹ýµ÷ÓÃawait()·½·¨£¬¿ÉÒÔÈÃÏß³ÌÔÚ¸ÃÌõ¼þϵȴý¡£µ±µ÷ÓÃsignalAll()·½·¨£¬ÓÖ¿ÉÒÔ»½ÐѸÃÌõ¼þϵĵȴýµÄÏ̡߳£ÓйØCondition½Ó¿ÚµÄAPI¿ÉÒÔ¾ßÌå²Î¿¼JavaAPIÎĵµ¡£
Ìõ¼þ±äÁ¿±È½Ï³éÏó£¬ÔÒòÊÇËû²»ÊÇ×ÔÈ»ÓïÑÔÖеÄÌõ¼þ¸ÅÄ¶øÊdzÌÐò¿ØÖƵÄÒ»ÖÖÊֶΡ£
Ï ......