| ±à¼ÍƼö: |
| ±¾ÎÄÀ´×ÔÓÚcsdn,±¾Îļòµ¥½éÉÜÁËÏ̳߳صÄÔÀíºÍÓ÷¨£¬Ï£Íû¶ÔÄúµÄѧϰÓаïÖú¡£ |
|
ǰÑÔ
1.¶ÔÓÚ¶àỊ̈߳¬´ó¼ÒÓ¦¸ÃºÜÊìϤ¡£µ«ÊÇ£¬´ó¼ÒÁ˽âÏ̳߳ØÂð£¿
2.½ñÌ죬ÎÒ½«´ø´ó¼ÒÈ«²¿Ñ§Ï°¹ØÓÚÏ̳߳صÄËùÓÐ֪ʶ¡£
Ŀ¼

1. ¼ò½é

2. ¹¤×÷ÔÀí
2.1 ºËÐIJÎÊý
Ï̳߳ØÖÐÓÐ6¸öºËÐIJÎÊý£¬¾ßÌåÈçÏÂ

ÉÏÊö6¸ö²ÎÊýµÄÅäÖà ¾ö¶¨ÁË Ï̳߳صŦÄÜ£¬¾ßÌåÉèÖÃʱ»ú = ´´½¨ Ï̳߳ØÀà¶ÔÏóʱ ´«Èë
ThreadPoolExecutorÀà = Ï̳߳صÄÕæÕýʵÏÖÀà
¿ª·¢Õ߿ɸù¾Ý²»Í¬ÐèÇó ÅäÖúËÐIJÎÊý£¬´Ó¶øÊµÏÖ×Ô¶¨ÒåÏ̳߳Ø
| //
´´½¨Ï̳߳ضÔÏóÈçÏÂ
// ͨ¹ý ¹¹Ôì·½·¨ ÅäÖúËÐIJÎÊý
Executor executor = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE,
TimeUnit.SECONDS,
sPoolWorkQueue,
sThreadFactory
);
// ¹¹Ô캯ÊýÔ´Âë·ÖÎö
public ThreadPoolExecutor (int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable workQueue>,
ThreadFactory threadFactory ) |
×¢£ºJava ÀïÒÑÄÚÖÃ4ÖÖ³£ÓõÄÏ̳߳أ¨¼´ ÒѾÅäÖúúËÐIJÎÊý£©£¬ÏÂÃæ»áÏêϸ˵Ã÷
2.2 ÄÚ²¿ÔÀíÂß¼
µ±Ï̳߳ØÔËÐÐʱ£¬×ñÑÒÔϹ¤×÷Âß¼

3. ʹÓÃÁ÷³Ì
Ï̳߳صÄʹÓÃÁ÷³ÌÈçÏÂ
| //
1. ´´½¨Ï̳߳Ø
// ´´½¨Ê±£¬Í¨¹ýÅäÖÃÏ̳߳صIJÎÊý£¬´Ó¶øÊµÏÖ×Ô¼ºËùÐèµÄÏ̳߳Ø
Executor threadPool = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE,
TimeUnit.SECONDS,
sPoolWorkQueue,
sThreadFactory
);
// ×¢£ºÔÚJavaÖУ¬ÒÑÄÚÖÃ4ÖÖ³£¼ûÏ̳߳أ¬ÏÂÃæ»áÏêϸ˵Ã÷
// 2. ÏòÏ̳߳ØÌá½»ÈÎÎñ£ºexecute£¨£©
// ˵Ã÷£º´«Èë Runnable¶ÔÏó
threadPool.execute(new Runnable() {
@Override
public void run() {
... // Ïß³ÌÖ´ÐÐÈÎÎñ
}
});
// 3. ¹Ø±ÕÏ̳߳Øshutdown()
threadPool.shutdown();
// ¹Ø±ÕÏ̵߳ÄÔÀí
// a. ±éÀúÏ̳߳ØÖеÄËùÓй¤×÷Ïß³Ì
// b. Öð¸öµ÷ÓÃÏ̵߳Äinterrupt£¨£©ÖжÏỊ̈߳¨×¢£ºÎÞ·¨ÏìÓ¦ÖжϵÄÈÎÎñ¿ÉÄÜÓÀÔ¶ÎÞ·¨ÖÕÖ¹£©
// Ò²¿Éµ÷ÓÃshutdownNow£¨£©¹Ø±ÕỊ̈߳ºthreadPool.shutdownNow£¨£©
// ¶þÕßÇø±ð£º
// shutdown£ºÉèÖà Ï̳߳صÄ״̬ Ϊ SHUTDOWN£¬È»ºóÖжÏËùÓÐûÓÐÕýÔÚÖ´ÐÐÈÎÎñµÄÏß³Ì
// shutdownNow£ºÉèÖà Ï̳߳صÄ״̬ Ϊ STOP£¬È»ºó³¢ÊÔÍ£Ö¹ËùÓеÄÕýÔÚÖ´ÐлòÔÝÍ£ÈÎÎñµÄỊ̈߳¬²¢·µ»ØµÈ´ýÖ´ÐÐÈÎÎñµÄÁбí
// ʹÓý¨Ò飺һ°ãµ÷ÓÃshutdown£¨£©¹Ø±ÕÏ̳߳أ»ÈôÈÎÎñ²»Ò»¶¨ÒªÖ´ÐÐÍ꣬Ôòµ÷ÓÃshutdownNow£¨£© |
4. ³£¼ûµÄ4À๦ÄÜÏ̳߳Ø
¸ù¾Ý²ÎÊýµÄ²»Í¬ÅäÖã¬JavaÖÐ×î³£¼ûµÄÏ̳߳ØÓÐ4Àࣺ
1.¶¨³¤Ï̳߳أ¨FixedThreadPool£©
2.¶¨Ê±Ï̳߳أ¨ScheduledThreadPool £©
3.¿É»º´æÏ̳߳أ¨CachedThreadPool£©
4.µ¥Ï̻߳¯Ï̳߳أ¨SingleThreadExecutor£©
¼´ ¶ÔÓÚÉÏÊö4ÀàÏ̳߳أ¬JavaÒѸù¾Ý Ó¦Óó¡¾° ÅäÖúúËÐIJÎÊý
4.1 ¶¨³¤Ï̳߳أ¨FixedThreadPool£©
1.ÌØµã£ºÖ»ÓкËÐÄÏß³Ì & ²»»á±»»ØÊÕ¡¢Ïß³ÌÊýÁ¿¹Ì¶¨¡¢ÈÎÎñ¶ÓÁÐÎÞ´óСÏÞÖÆ£¨³¬³öµÄÏß³ÌÈÎÎñ»áÔÚ¶ÓÁÐÖеȴý£©
2.Ó¦Óó¡¾°£º¿ØÖÆÏß³Ì×î´ó²¢·¢Êý
3.¾ßÌåʹÓãºÍ¨¹ý Executors.newFixedThreadPool()
´´½¨
ʾÀý£º
| //
1. ´´½¨¶¨³¤Ï̳߳ضÔÏó & ÉèÖÃÏ̳߳ØÏß³ÌÊýÁ¿¹Ì¶¨Îª3
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
// 2. ´´½¨ºÃRunnableÀàÏ̶߳ÔÏó & ÐèÖ´ÐеÄÈÎÎñ
Runnable task =new Runnable(){
public void run(){
System.out.println("Ö´ÐÐÈÎÎñÀ²");
}
};
// 3. ÏòÏ̳߳ØÌá½»ÈÎÎñ£ºexecute£¨£©
fixedThreadPool.execute(task);
// 4. ¹Ø±ÕÏ̳߳Ø
fixedThreadPool.shutdown(); |
4.2 ¶¨Ê±Ï̳߳أ¨ScheduledThreadPool £©
ÌØµã£ººËÐÄÏß³ÌÊýÁ¿¹Ì¶¨¡¢·ÇºËÐÄÏß³ÌÊýÁ¿ÎÞÏÞÖÆ£¨ÏÐÖÃʱÂíÉÏ»ØÊÕ£©
Ó¦Óó¡¾°£ºÖ´Ðж¨Ê± / ÖÜÆÚÐÔ ÈÎÎñ
ʹÓãºÍ¨¹ýExecutors.newScheduledThreadPool()´´½¨
ʾÀý£º
| //
1. ´´½¨ ¶¨Ê±Ï̳߳ضÔÏó & ÉèÖÃÏ̳߳ØÏß³ÌÊýÁ¿¹Ì¶¨Îª5
ScheduledExecutorService scheduledThreadPool
= Executors.newScheduledThreadPool(5);
// 2. ´´½¨ºÃRunnableÀàÏ̶߳ÔÏó & ÐèÖ´ÐеÄÈÎÎñ
Runnable task =new Runnable(){
public void run(){
System.out.println("Ö´ÐÐÈÎÎñÀ²");
}
};
// 3. ÏòÏ̳߳ØÌá½»ÈÎÎñ£ºschedule£¨£©
scheduledThreadPool.schedule(task, 1,
TimeUnit.SECONDS); // ÑÓ³Ù1sºóÖ´ÐÐÈÎÎñ
scheduledThreadPool.scheduleAtFixedRate
(task,10,1000,TimeUnit.MILLISECONDS);//
ÑÓ³Ù10msºó¡¢Ã¿¸ô1000msÖ´ÐÐÈÎÎñ
// 4. ¹Ø±ÕÏ̳߳Ø
scheduledThreadPool.shutdown(); |
4.3 ¿É»º´æÏ̳߳أ¨CachedThreadPool£©
ÌØµã£ºÖ»ÓзǺËÐÄÏ̡߳¢Ïß³ÌÊýÁ¿²»¹Ì¶¨£¨¿ÉÎÞÏ޴󣩡¢Áé»î»ØÊÕ¿ÕÏÐỊ̈߳¨¾ß±¸³¬Ê±»úÖÆ£¬È«²¿»ØÊÕʱ¼¸ºõ²»Õ¼ÏµÍ³×ÊÔ´£©¡¢Ð½¨Ị̈߳¨ÎÞÏ߳̿ÉÓÃʱ£©
ÈκÎÏß³ÌÈÎÎñµ½À´¶¼»áÁ¢¿ÌÖ´ÐУ¬²»ÐèÒªµÈ´ý
Ó¦Óó¡¾°£ºÖ´ÐдóÁ¿¡¢ºÄʱÉÙµÄÏß³ÌÈÎÎñ
ʹÓãºÍ¨¹ýExecutors.newCachedThreadPool()´´½¨
ʾÀý£º
| //
1. ´´½¨¿É»º´æÏ̳߳ضÔÏó
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// 2. ´´½¨ºÃRunnableÀàÏ̶߳ÔÏó & ÐèÖ´ÐеÄÈÎÎñ
Runnable task =new Runnable(){
public void run(){
System.out.println("Ö´ÐÐÈÎÎñÀ²");
}
};
// 3. ÏòÏ̳߳ØÌá½»ÈÎÎñ£ºexecute£¨£©
cachedThreadPool.execute(task);
// 4. ¹Ø±ÕÏ̳߳Ø
cachedThreadPool.shutdown();
//µ±Ö´Ðеڶþ¸öÈÎÎñʱµÚÒ»¸öÈÎÎñÒѾÍê³É
//ÄÇô»á¸´ÓÃÖ´ÐеÚÒ»¸öÈÎÎñµÄỊ̈߳¬¶ø²»ÓÃÿ´Îн¨Ï̡߳£ |
4.4 µ¥Ï̻߳¯Ï̳߳أ¨SingleThreadExecutor£©
ÌØµã£ºÖ»ÓÐÒ»¸öºËÐÄỊ̈߳¨±£Ö¤ËùÓÐÈÎÎñ°´ÕÕÖ¸¶¨Ë³ÐòÔÚÒ»¸öÏß³ÌÖÐÖ´ÐУ¬²»ÐèÒª´¦ÀíÏß³Ìͬ²½µÄÎÊÌ⣩
Ó¦Óó¡¾°£º²»Êʺϲ¢·¢µ«¿ÉÄÜÒýÆðIO×èÈûÐÔ¼°Ó°ÏìUIÏß³ÌÏìÓ¦µÄ²Ù×÷£¬ÈçÊý¾Ý¿â²Ù×÷£¬Îļþ²Ù×÷µÈ
ʹÓãºÍ¨¹ýExecutors.newSingleThreadExecutor()´´½¨
ʾÀý£º
| //
1. ´´½¨µ¥Ï̻߳¯Ï̳߳Ø
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
// 2. ´´½¨ºÃRunnableÀàÏ̶߳ÔÏó & ÐèÖ´ÐеÄÈÎÎñ
Runnable task =new Runnable(){
public void run(){
System.out.println("Ö´ÐÐÈÎÎñÀ²");
}
};
// 3. ÏòÏ̳߳ØÌá½»ÈÎÎñ£ºexecute£¨£©
singleThreadExecutor.execute(task);
// 4. ¹Ø±ÕÏ̳߳Ø
singleThreadExecutor.shutdown(); |
4.5 ³£¼ûÏß³Ì³Ø ×ܽá & ¶Ô±È

5. ×ܽá
ÔĶÁ±¾Îĺó£¬ÏàÐÅÄãÒѾ·Ç³£Á˽âÏß³Ì³Ø & Ó÷¨
|