本文导读目录:
2、heritrix(Heritrix的多线程ToeThread和ToePool)
eclipse写的java保存到哪了(您好,用eclipse做好Dejava程序题保存后,怎样将它保存到桌面或者直接
2025年1月三星i809(iphone5 报价)您好,用eclipse做好的java程序题保存后,怎样将它保存到桌面或者直接
你说的是这个项目么,在项目上右键,最下面有个proterty,点击,然后弹出的页面会显示项目的属性,里面有这个项目保存的位置,找到项目,移到桌面或者保存U盘都行。
jsp生成Dejava文件保存在哪里
iphone5 报价heritrix(Heritrix的多线程ToeThread和ToePoo l
本文目录Heritrix的多线程ToeThread和ToePoolHeritrix的多线程ToeThread和ToePool想要更有效更快速De抓取网页内容则必须采用多线程Heritrix中提供了一个标准的线程池ToePool它用于管理所有的抓取线程ToePool和ToeThread都位于archivecrawlerframework包中前面已经说过ToePool的初始化是在CrawlController的initialize()方法中完成的来看一下ToePool以及ToeThread是如何被初始化的以下代码是在CrawlController中用于对ToePool进行初始化的???构造函数toePool=newToePool(this);???//按orderxml中的配置实例化并启动线程???toePoolsetSize(ordergetMaxToes());ToePoolDe构造函数很简单如下所示publicToePool(CrawlControllerc){????super(ToeThreads);????ntroller=c;???}它仅仅是Zhōu用Liǎo父类javalangThread Group的构造函数同时将注入的CrawlController赋给类Biàn量这样便建立起了一个线程池的实例Liǎo但是那些真正的工作线程又是如何建立的呢,下面来看一下线程池中的setSize(int)方Fǎ从名称上看这个方法很像是一个普通的赋值方法但实际上它并不是那么简单publicvoidsetSize(intnewsize)???{????targetSize=newsize;????intdifference=newsizegetToeCount();//如果发现线程池Zhōng的实际线程数Liàng小于应有的数量????//则启Dòng新的线程????if(difference》){?????????for(inti=;i《=difference;i++){??????????//启动新Xiàn程?????????2025年1月三星i809(iphone5 报价)????startNewThread();?????}????}????//Rú果线程池中的线Chéng数量已经达到需要????else????{intretainedToes=targetSize;?????????//将线程池中的线程管理起来放入数组中?????????Threadtoes=thisgetToes();//循环去除多YúDe线程?????????for(inti=;i《toeslength;i++){?????????????if(!(toes;?????????????ttretire();?????????}????}???}//用于取得所有属于当前线程池的Xiàn程???privateThreadtoes)方法时????//实际上是将所有该ThreadGroup中开Pì的Xiàn程放Rù????//toes这个数组中以备后面的管理????thisenumerate(toes);????returntoes;???}//开启一个新线程???privatesynchronizedvoidstartNewThread()???{????ToeThreadnewThread=newToeThread(thisnextSerialNumber++);????newThreadsetPriority(DEFAULT_TOE_PRIORITY);????newThreadstart();???}通过Shàng面的代码可以得出这样的结论线程池本身在创建的Shí候并没有任何活动的线程实例只有当它的setSize方Fǎ被调用时才有可能创建新线程如果当setSize方法被调用多次而传入不同的参数时线程池会根据参数Lǐ所设定的值的大Xiǎo来决Dìng池中所管理线程数量的增减???当线程被启动后所执行的是其run()方法中的片段Jiē下来看一个ToeThread到底是如何处理从Frontier中获Děi的链接的publicvoidrun()???{????Stringname=controllergetOrder()getCrawlOrderName();????loggerfine(getName()+startedfororder+name+);try{?????while(true)?????{?????????????//检查是否Yīng该继续处理??????continueCheck();??????setStep(STEP_ABOUT_TO_GET_URI);?????????????//使用Frontier的next方Fǎ从Frontier中?????????????//取出下一个要Chù理的链接?????????????CrawlURIcuri=controllergetFrontier()next();?????????????//同步当前线程?????????????synchronized(this){?????????????????continueCheck();?????????????????setCurrentCuri(curi);?????????????}/*??????????????*处理取出的链接??????????????*/?????????????processCrawlUri();?????????????setStep(STEP_ABOUT_TO_RETURN_URI);?????????????//检查是否应该继续处理?????????????continueCheck();?????????????//使用Frontier的finished()方法?????????????//来对刚才处理的链接做收尾工作?????????????//比如将分析得到的新的链接加入?????????????//到等待队列中去?????????????synchronized(this){?????????????????controllergetFrontier()finished(currentCuri);?????????????????setCurrentCuri(null);?????????????}//后续的处理?????????????setStep(STEP_FINISHING_PROCESS);?????????????lastFinishTime=SystemcurrentTimeMillis();?????????//释放链Jiē?????????????controllerreleaseContinuePermission();?????????????if(shouldRetire){?????????????????break;//fromwhile(true)?????????????}?????????}????}catch(EndedExceptione){????}catch(Exceptione){????????loggerlog(LevelSEVEREFatalexceptionin+getName()e);????}catch(OutOfMemoryErrorerr){????????seriousError(err);????}finally{????????controllerreleaseContinuePermission();????}????setCurrentCuri(null);//清理缓存数据????this();????thisRecorder=null;????localProcessors=null;lishixinzhi/Article/program/Java/ky//。
Heritrix的多线程ToeThread和ToePool
想要更有效更快速的抓取网页Nèi容则必须采Yòng多线程HeritrixZhōng提供了一个标准的线程池ToePool它用于管理所有的Zhuā取线ChéngToePool和ToeThread都位于archivecrawlerframework包中前面已经说过ToePool的初始化是ZàiCrawlController的initialize()方法中Wán成的来看一下ToePool以及ToeThread是如何被初始化De以下代码是在CrawlController中用于对ToePool进行初始化的???构Zào函数toePool=newToePool(this);???//按orderxml中De配置实例化并启动线程???toePoolsetSize(ordergetMaxToes());ToePool的构造函数很简单如下所示publicToePool(CrawlControllerc){????super(ToeThreads);????ntroller=c;???}它仅仅是调用了父类javalangThreadGroup的构造函数同时将注入的CrawlControllerFù给类变量这样便建立起了一个线Chéng池的实例了但是那些真正的工作线程又是如何建立的呢????下面来看Yī下线程池中的setSize(int)方法Cóng名Chèng上看这个方Fǎ很像是一个普通的Fù值方法但实JìShàng它并不是那么简单publicvoidsetSize(intnewsize)???{????targetSize=newsize;????intdifference=newsizegetToeCount();
![](/tutu9/143.png)
//如果Fā现线程池中的实际线程数量小于应有的数量????//则启动新的线程????if(difference》){?????????for(inti=;i《=difference;i++){??????????//启动新Xiàn程?????????????startNewThread();?????}????}????//如果线程池中的线程数量已经达到需要????else????{
三星i809的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于iphone5 报价、三星i809的信息别忘了在本站进行查找喔。