本文为大家分享了java多线程的简单实现及线程池实例,供大家参考,具体内容如下
<强>一、多线程的两种实现方式强>
1,继承线程类的多线程
/* * *继承线程类的多线程简单实现 */公共类extThread扩展线程{ 公共空间run () { for (int i=0; i<100;我+ +){ System.out.println (getName () +“-”+ i); } } arg公共静态void main (String []) { for (int i=0; i<100;我+ +){ System.out.println (Thread.currentThread () . getname () +“-”+ i); 如果(我==50){ 新的extThread () .start (); 新的extThread () .start (); } } } }
2,实现运行的接口的多线程
/* * *实现runable接口的多线程实例 */公共类runThread实现Runnable { 公共空间run () { for (int i=0; i<100;我+ +){ System.out.println (Thread.currentThread () . getname () +“-”+ i); } } arg公共静态void main (String []) { for (int i=0; i<100;我+ +){ System.out.println (Thread.currentThread () . getname () +“-”+ i); 如果(我==50){ runThread rt=new runThread (); 新线程(rt,“新线程1”).start (); 新线程(rt,“新线程2”).start (); } } } }
<强>二、线程池的简单实现强>
//实现运行的接口 类TestThread实现Runnable { 公共空间run () { for (int i=0;我& lt;我+ +){100; System.out.println (Thread.currentThread () . getname() +”我的值为:" + i); } } } 公开课threadPoolTest { 公共静态void main (String [] args) {//创建一个具有固定线程数的线程池 ExecutorService池=Executors.newFixedThreadPool (5);//向线程池中提交三个线程 池。提交(新TestThread ()); 池。提交(新TestThread ()); 池。提交(新TestThread ());//关闭线程池 pool.shutdown (); } } >之前<强>三、java爬虫使用线程池实例强>
/* * *爬虫调度线程池 */公开课threadPool { 公共静态HashMap<字符串,Spiders>statusMap=new HashMap<字符串,Spiders> ();//存放爬虫、关键为爬虫的id值为爬虫的线程池 静态HashMap<整数,ThreadPoolExecutor>threadMap=new HashMap<整数,ThreadPoolExecutor> ();//创建一个线程池 静态ThreadPoolExecutor threadPool=new ThreadPoolExecutor (200、230、80000 l, TimeUnit.SECONDS, 新的ArrayBlockingQueue(10), 新的ThreadPoolExecutor.CallerRunsPolicy ()); 公共静态孔隙executeThread(蜘蛛蜘蛛){ statusMap.put (String.valueOf (spider.getId()),蜘蛛);//爬虫有效 如果(spider.getFlag ()==0) { 如果(spider.getStatus ()==0) {//表示爬虫进入抓取状态 ThreadPoolExecutor detailPool=零; 如果(threadMap.get (spider.getId ())==null) { detailPool=new ThreadPoolExecutor (80、80000 l, TimeUnit。秒,新ArrayBlockingQueue ( 10), 新的ThreadPoolExecutor.CallerRunsPolicy ()); threadMap.put (spider.getId (), detailPool); threadPool。执行(新threadRun(蜘蛛,threadMap)); } } } } }//实现运行的接口 类threadRun实现Runnable { 私人HashMap<整数,ThreadPoolExecutor>threadPoolMap; 私人蜘蛛蜘蛛; 公共threadRun(蜘蛛蜘蛛, ThreadPoolExecutor> HashMap<整数;threadPoolMap) { 这一点。threadPoolMap=threadPoolMap; 这一点。蜘蛛=蜘蛛; }//线程执行体 公共空间run () { 尝试{ 如果(rong360 .equals (spider.getWebsite ())) { 新RongThread (threadPoolMap.get (spider.getId()),蜘蛛) .startSpider (); }else if (xxgg_sd .equals (spider.getWebsite ())) { 新Spider_ShanDong (threadPoolMap.get(蜘蛛 蜘蛛).startSpider .getId ()), (); }else if (xxgg_gz .equals (spider.getWebsite ())) { 新Spider_GuiZhou (threadPoolMap.get(蜘蛛 蜘蛛).startSpider .getId ()), (); }else if (sx .equals (spider.getWebsite ())) { 新SpiderSX(蜘蛛).startSpider (); }else if(“百度”.equals (spider.getWebsite ())) { 新SpiderBaiDu(蜘蛛).startSpider (); }else if (“11315”.equals (spider.getWebsite ())) { 新Spider11315ByName(蜘蛛).startSpider (); } }捕捉(异常e) { e.printStackTrace (); } } } >之前 java简单实现多线程及线程池实例详解