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

网友投稿 275 2023-02-11


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

本文为大家分享了java多线程的简单实现及线程池实例,供大家参考,具体内容如下

一、多线程的两种实现方式

1、继承Thread类的多线程

/**

* 继承Thread类的多线程简单实现

*/

public class extThread extends Thread {

public void run(){

for(int i=0;i<100;i++){

System.out.println(getName()+"-"+i);

}

}

public static void main(String arg[]){

for(int i=0;i<100;i++){

System.out.println(Thread.currentThread().getName()+"-"+i);

if(i==50){

new extThread().start();

new extThread().start();

}

}

}

}

2、实现Runnable接口的多线程

/**

* 实现runable接口的多线程实例

*/

public class runThread implements Runnable {

public void run(){

for(int i=0;i<100;i++){

System.out.println(Thread.currentThread().getName()+"-"+i);

}

}

public static void main(String arg[]){

for(int i=0;i<100;i++){

System.out.println(Thread.currentThread().getName()+"-"+i);

if(i==50){

runThread rt = new runThread();

new Thread(rt,"新线程1").start();

new Thread(rt,"新线程2").start();

}

}

}

}

二、线程池的简单实现

//实现Runnable接口

class TestThread implements Runnable{

public void run() {

for(int i = 0;i < 100;i++){

System.out.println(Thread.currentThread().getName() + "i的值为:" + i);

}

}

}

public class threadPoolTest {

public static void main(String[] args) {

//创建一个具有固定线程数的线程池

ExecutorService pool = Executors.newFixedThreadPool(5);

//向线程池中提交三个线程

pool.submit(new TestThread());

pool.submit(new Tehttp://stThread());

pool.submit(new TestThread());

//关闭线程池

pool.shutdown();

}

}

三、java爬虫使用线程池实例

/**

* 爬虫调度线程池

*/

public class threadPool {

public static HashMap statusMap = new HashMap();

// 存放爬虫,key为爬虫的id,value为爬虫的线程池

static HashMap threadMap = new HashMap();

//创建一个线程池

static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200, 230,80000L,

TimeUnit.SECONDS,

new ArrayBlockingQueue(10),

new ThreadPoolExecutor.CallerRunsPolicy());

public static void executeThread(Spiders spider) {

statusMap.put(String.valueOf(spider.getId()), spider);

// 爬虫有效

if (spider.getFlag() == 0) {

if (spider.getStatus() == 0) {

// 表示爬虫进入抓取状态

ThreadPoolExecutor detailPool = null;

if (threadMap.get(spider.gGfSseaDetId()) == null) {

detailPool = new ThreadPoolExecutor(30, 80, 80000L,

TimeUnit.SECONDS, new ArrayBlockingQueue(

10),

new ThreadPoolExecutor.CallerRunsPolicy());

threadMap.put(spider.getId(), detailPool);

threadPool.execute(new threadRun(spider, threadMap));

}

}

}

}

}

//实现Runnable接口

class threadRun implements Runnable {

private HashMap threadPoolMap;

private Spiders spider;

public threadRun(Spiders spider,

HashMap threadPoolMap) {

this.threadPoolMap = threadPoolMap;

this.spider = spider;

}

//线程执行体

public void run() {

try {

if ("rong360".equals(spider.getWebsite())) {

new RongThread(threadPoolMap.get(spider.getId()), spider)

.startSpider();

} else if ("xxgg_sd".equals(spider.getWebsite())) {

new Spider_ShanDong(threadPoolMap.get(spider

.getId()), spider).startSpider();

} else if ("xxgg_gz".equals(spider.getWebsite())) {

new Spider_GuiZhou(threadPoolMap.get(spider

.getId()), spider).startSpider();

} else if ("sx".equals(spider.getWebsite())) {

new SpiderSX(spider).startSpider();

} else if ("baidu".equals(spider.getWebsite())) {

new SpiderBaiDu(spider).startSpider();

} else if ("11315".equals(spider.getWebsite())) {

new Spider11315ByName(spider).startSpider();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:线上接口测试(接口测试怎么测试的)
下一篇:智能手表 开发接口(智能手表开发者平台)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~