package Ġcom . top view . pure joy . common . component . download . dispatcher Ċ Ċ import Ġcom . top view . pure joy . common . component . download . task . Download Task Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . ExecutorService Ċ import Ġjava . util . concurrent . Executors Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġgi ag or Ġon Ġ 2 0 2 1 / 1 2 / 1 8 Ċ Ġ* Ċ Ġ* Ġå¯¹ ä¸ĭè½½ ä»»åĬ¡ è¿Ľè¡Į è°ĥ åº¦ Ċ Ġ* Ġ*/ Ċ class ĠDownload Dispatcher Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľĢ å¤ļ åĲĮæĹ¶ ä¸ĭè½½ çļĦ ä»»åĬ¡ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmax Download Counts Ġ= Ġ 5 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃĺ æĶ¾ ä»»åĬ¡ çļĦ çŃīå¾ħ éĺŁåĪĹ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġready Task Queue : ĠLinkedList < Download Task > Ġ= ĠLinkedList () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä»»åĬ¡ çļĦ æī§è¡Į éĺŁåĪĹ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġrunning Task Queue : ĠLinkedList < Download Task > Ġ= ĠLinkedList () ĊĊĠĠĠ Ġprivate Ġvar ĠexecutorService : ĠExecutor Service Ġ= ĠExec utors . new Cached ThreadPool () ĊĊĠĠĠ Ġfun Ġenqueue ( task : ĠDownload Task ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åĬł éĶģ ä¿Ŀè¯ģ ä»»åĬ¡ åı¯ä»¥ æŃ£ç¡® åľ° è¢« æ·»åĬł ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġready Task Queue . add Last ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpromote And Execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpromote And Execute () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġexecuted Task : ĠDownload Task ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĬł éĶģ ä¿Ŀè¯ģ ä»»åĬ¡ åı¯ä»¥ æŃ£ç¡® è¢« æī§è¡Į ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å½ĵåīį åľ¨ ä¸ĭè½½ çļĦ ä»»åĬ¡ æķ° æ²¡æľī åĪ° è¾¾ æľĢå¤§ åĢ¼ ï¼Į å¹¶ä¸Ķ çŃīå¾ħ éĺŁåĪĹ ä¸Ń æľī ä»»åĬ¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( running Task Queue . size Ġ< Ġmax Download Counts Ġ&& Ġready Task Queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecuted Task Ġ= Ġready Task Queue . remove First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Task Queue . add Last ( executed Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexecuted Task ?. execute Sub Tasks ( executor Service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵ ä»»åĬ¡ æī§è¡Į å®Į åĲİ ï¼Į è°ĥçĶ¨ è¯¥ æĸ¹æ³ķ ï¼Į éĢļçŁ¥ ä»»åĬ¡ å·² æī§è¡Į å®ĮæĪĲ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġfinished ( task : ĠDownload Task ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġåľ¨ æī§è¡Į éĺŁåĪĹ ä¸Ń ç§»éĻ¤ è¯¥ ä»»åĬ¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Task Queue . remove ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ åĨį æ¬¡ å°Ŀè¯ķ æī§è¡Į ä»»åĬ¡ ĊĠĠĠĠĠĠĠ Ġpromote And Execute () ĊĠĠĠ Ġ} Ċ }