Java语言学习二十五(线程池)
package com.gf.erp.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadPoolTest {
public static void main(String[] args) throws Exception
{
//创建固定数量线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
//模拟提交10个任务
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println("线程ID: " + Thread.currentThread().getId());
try {
//线程池中的线程等待1
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
executor.shutdown();
System.out.println("最后执行打印...");
}
}
package com.gf.erp.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadPoolTest {
public static void main(String[] args) throws Exception
{
//创建固定数量线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
//模拟提交10个任务
for (int i = 0; i < 10; i++) {
Future f = executor.submit(() -> {
System.out.println("线程ID: " + Thread.currentThread().getId());
try {
//线程池中的线程等待1
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
f.get();
}
executor.shutdown();
System.out.println("最后执行打印...");
}
}
使用Excutors线程池工厂提供的线程池实现
```csharp
package com.gf.erp.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class MyThreadPool2 {
public static void bubbleSort(int[] dim)
{
for(int i=0;i<dim.length;i++)
{
for(int j=0;j<dim.length-1-i;j++)
{
if(dim[j]>dim[j+1])
{
int temp = dim[j];
dim[j] = dim[j+1];
dim[j+1] = temp;
}
}
}
}
public static void main(String[] args) throws Exception
{
int[][] tasks = {
{ 123,23,22,34,56,3,2,6,7,1,2,4,7,8,5,12,323},
{ 5,6,45,34,34,23,22,224,12,567,678,999,66,99},
{ 12,30,43,63,68,6,9,67,7,689,99,4,3,5,8,9,0},
{ 1,4,6,7,8,5,5,6,8,0,33,22,34,11,21,45,550,4},
{ 12,13,5,6,7,8,9,0,45,66,77,4,9,7,8,7,6,99,8},
{ 3,5,7,9,0,10,13,7,8,0,55,44,3,68,22,44,67,8}
};
for(int i=0;i<tasks.length;i++)
{
System.out.print("排序前数组:"+i+"=");
for(int j=0;j<tasks[i].length;j++)
System.out.print(tasks[i][j]+",");
System.out.println();
}
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < tasks.length; i++) {
int[] tempDim = tasks[i];
Future f = executor.submit(() -> {
System.out.println("thread id is: " + Thread.currentThread().getId());
try {
Thread.sleep(1000L);
bubbleSort(tempDim);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println(f.get());
}
executor.shutdown();
System.out.println("--------------here");
for(int i=0;i<tasks.length;i++)
{
System.out.print("排序后数组:"+i+"=");
for(int j=0;j<tasks[i].length;j++)
System.out.print(tasks[i][j]+",");
System.out.println();
}
}
}
使用自定义线程池实现
```csharp
package com.gf.erp.thread;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class MyThreadPool {
private int corePoolSize;
private int maximumPoolSize;
private long keepAliveTime;
private TimeUnit unit;
BlockingQueue<Runnable> workQueue;
ThreadFactory threadFactory;
RejectedExecutionHandler handler;
public static void bobbleSort(int[] dim)
{
for(int i=0;i<dim.length;i++)
{
for(int j=0;j<dim.length-1-i;j++)
{
if(dim[j]>dim[j+1])
{
int temp = dim[j+1];
dim[j+1] = dim[j];
dim[j] = temp;
}
}
}
}
public MyThreadPool(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,
RejectedExecutionHandler handler,int[][] task)
{
ExecutorService es = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,
unit,workQueue,threadFactory,handler);
try
{
for(int i=0;i<task.length;i++)
{
int[] tempDim = task[i];
Future f = es.submit(()->{
bobbleSort(tempDim);
});
System.out.println("f="+f.get());
}
es.shutdown();
for(int i=0;i<task.length;i++)
{
System.out.print("Dim:"+i+"=");
for(int j=0;j<task[i].length;j++)
System.out.print(task[i][j]+",");
System.out.println();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
int corePoolSize = 4;
int maximumPoolSize = 10;
long keepAliveTime = 10;
TimeUnit unit = TimeUnit.MINUTES;
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(20);
ThreadFactory threadFactory = new MyThreadFactory();
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
int[][] tasks = {
{123,23,22,34,56,3,2,6,7,1,2,4,7,8,5,12,323},
{5,6,45,34,34,23,22,224,12,567,678,999,66,99},
{12,30,43,63,68,6,9,67,7,689,99,4,3,5,8,9,0},
{1,4,6,7,8,5,5,6,8,0,33,22,34,11,21,45,550,4},
{12,13,5,6,7,8,9,0,45,66,77,4,9,7,8,7,6,99,8},
{3,5,7,9,0,10,13,7,8,0,55,44,3,68,22,44,67,8}
};
MyThreadPool mypool = new MyThreadPool(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,
threadFactory,handler,tasks);
for(int i=0;i<tasks.length;i++)
{
for(int j=0;j<tasks[i].length;j++)
System.out.println(tasks[i][j]);
System.out.println("------------");
}
}
}
class MyThreadFactory implements ThreadFactory
{
@Override
public Thread newThread(Runnable r) {
return new Thread(r);
}
}
思考题
定义一个大数组,使用线程池最高效排序。
还没有评论,来说两句吧...