手把手教你做一个java线程池小例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

废话不多说开整

我用的是eclipse(这应该没多大影响)

建一个工程java工程和web工程都行然后建一个包建一个类带main方法

首先贴出来的是内部类

//继承了runnable接口

class MyTask implements Runnable {

private int taskNum;

public MyTask(int num) {

this.taskNum = num;

}

@Override

public void run() {

System.out.println("正在执行task "+taskNum);

try {

//写业务

Thread.currentThread().sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("task "+taskNum+"执行完毕!");

}

}

接下来就是这个类

public class testOne {

public static void main(String[] args) {

ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 7, 10, LISECONDS, new ArrayBlockingQueue(2),new ThreadPoolExecutor.DiscardOldestPolicy() );

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

MyTask myTask = new MyTask(i);

executor.execute(myTask);

System.out.println("线程池中线程数目:

"+executor.getPoolSize()+"队列等待执行的任务数目:"+

executor.getQueue().size()+"已经执行完别的任务数目:

"+executor.getCompletedTaskCount());

}

executor.shutdown();

}

}

接下来在说明一下ThreadPoolExecutor的参数设置ThreadPoolExecutor(int corePoolSize,//线程池维护线程的最少数量

int maximumPoolSize,//线程池维护线程的最大数量

long keepAliveTime,//线程池维护线程所允许的空闲时间

TimeUnit unit, 线程池维护线程所允许的空闲时间单位

BlockingQueue workQueue,线程池所使用的缓存队列

RejectedExecutionHandler handler线程池对拒绝任务的处理策略

)

handler有四个选择:

ThreadPoolExecutor.AbortPolicy()

抛出java.util.concurrent.RejectedExecutionException异常

ThreadPoolExecutor.CallerRunsPolicy()

重试添加当前的任务,他会自动重复调用execute()方法

ThreadPoolExecutor.DiscardOldestPolicy()

抛弃旧的任务

ThreadPoolExecutor.DiscardPolicy()

抛弃当前的任务

上面是一个例子接下来再来一个例子

建立一个类继承Runnable接口,大概是这样:

public class BelongTo2 implements Runnable {

@Override

public void run() {

try {

//当前线程休眠2秒当然也可以写业务

System.out.print("东西");

Thread.currentThread().sleep(2000);

System.out.print("\n");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

然后再

建立一个类带main方法,大概是这样:

public class Test2 {

public static void main(String[] args) {

//创建定长线程池大小为5

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);

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

BelongTo2 th=new BelongTo2();

fixedThreadPool.execute(th);

}

fixedThreadPool.shutdown();

}

}

运行就可以了。

简单介绍一下ExecutorService 这个类创建一个定长线程池,可控制线程最大并发数(后面的参数就是并发线程的数量),超出的线程会在队列中等待。

相关文档
最新文档