java简单实现多线程及线程池实例详解

  

本文为大家分享了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简单实现多线程及线程池实例详解