java简单实现多线程及线程池实例详解
本文为大家分享了java多线程的简单实现及线程池实例,供大家参考,具体内容如下
一、多线程的两种实现方式
1、继承Thread类的多线程
/** *继承Thread类的多线程简单实现 */ publicclassextThreadextendsThread{ publicvoidrun(){ for(inti=0;i<100;i++){ System.out.println(getName()+"-"+i); } } publicstaticvoidmain(Stringarg[]){ for(inti=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"-"+i); if(i==50){ newextThread().start(); newextThread().start(); } } } }
2、实现Runnable接口的多线程
/** *实现runable接口的多线程实例 */ publicclassrunThreadimplementsRunnable{ publicvoidrun(){ for(inti=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"-"+i); } } publicstaticvoidmain(Stringarg[]){ for(inti=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"-"+i); if(i==50){ runThreadrt=newrunThread(); newThread(rt,"新线程1").start(); newThread(rt,"新线程2").start(); } } } }
二、线程池的简单实现
//实现Runnable接口 classTestThreadimplementsRunnable{ publicvoidrun(){ for(inti=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"i的值为:"+i); } } } publicclassthreadPoolTest{ publicstaticvoidmain(String[]args){ //创建一个具有固定线程数的线程池 ExecutorServicepool=Executors.newFixedThreadPool(5); //向线程池中提交三个线程 pool.submit(newTestThread()); pool.submit(newTestThread()); pool.submit(newTestThread()); //关闭线程池 pool.shutdown(); } }
三、java爬虫使用线程池实例
/** *爬虫调度线程池 */ publicclassthreadPool{ publicstaticHashMapstatusMap=newHashMap (); //存放爬虫,key为爬虫的id,value为爬虫的线程池 staticHashMap threadMap=newHashMap (); //创建一个线程池 staticThreadPoolExecutorthreadPool=newThreadPoolExecutor(200,230,80000L, TimeUnit.SECONDS, newArrayBlockingQueue (10), newThreadPoolExecutor.CallerRunsPolicy()); publicstaticvoidexecuteThread(Spidersspider){ statusMap.put(String.valueOf(spider.getId()),spider); //爬虫有效 if(spider.getFlag()==0){ if(spider.getStatus()==0){ //表示爬虫进入抓取状态 ThreadPoolExecutordetailPool=null; if(threadMap.get(spider.getId())==null){ detailPool=newThreadPoolExecutor(30,80,80000L, TimeUnit.SECONDS,newArrayBlockingQueue ( 10), newThreadPoolExecutor.CallerRunsPolicy()); threadMap.put(spider.getId(),detailPool); threadPool.execute(newthreadRun(spider,threadMap)); } } } } } //实现Runnable接口 classthreadRunimplementsRunnable{ privateHashMap threadPoolMap; privateSpidersspider; publicthreadRun(Spidersspider, HashMap threadPoolMap){ this.threadPoolMap=threadPoolMap; this.spider=spider; } //线程执行体 publicvoidrun(){ try{ if("rong360".equals(spider.getWebsite())){ newRongThread(threadPoolMap.get(spider.getId()),spider) .startSpider(); }elseif("xxgg_sd".equals(spider.getWebsite())){ newSpider_ShanDong(threadPoolMap.get(spider .getId()),spider).startSpider(); }elseif("xxgg_gz".equals(spider.getWebsite())){ newSpider_GuiZhou(threadPoolMap.get(spider .getId()),spider).startSpider(); }elseif("sx".equals(spider.getWebsite())){ newSpiderSX(spider).startSpider(); }elseif("baidu".equals(spider.getWebsite())){ newSpiderBaiDu(spider).startSpider(); }elseif("11315".equals(spider.getWebsite())){ newSpider11315ByName(spider).startSpider(); } }catch(Exceptione){ e.printStackTrace(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。