Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android ¶àỊ̈߳º ÍêÈ«½âÎöÏ̳߳ØThreadPoolÔ­Àí&ʹÓÃ
 
  1977  次浏览      31
 2018-5-21
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ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. ×ܽá

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

 

   
1977 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì