1.希望在子线程中请求网络数据和在主线程中修改UI
new Thread(){run()}.start();
2.线程池的获取
1).创建线程池
Executor newFiexedThreadPool=Executors.newFixedThreadPool(5)
2)获取线程执行内容,实现了runnable接口的实现类,将参数传到构造中去
newFiexedThreadPool.execute(new RunnableTask(url,position))
3)定义runnable接口,将要执行在子线程中的程序,放到run方法中去,所需要的参数由其构造方法传递
class RunnableTask implements Runnable{
private String imgeUrl;
private int position;
public RunnableTask(String imgeUrl, int position) {
this.imgeUrl=imgeUrl;
this.position=position;
}
3.线程池管理者
public class ThreadManager {
private static ThreadPoolProxy threadPoolProxy;
private static Object object = new Object();
public static ThreadPoolProxy getThreadPoolProxy(){
synchronized (object) {
if(threadPoolProxy == null){
threadPoolProxy = new ThreadPoolProxy(2,5,5L);
}
return threadPoolProxy;
}
}
public static class ThreadPoolProxy{
//做核心的执行任务的操作
private int corePoolSize;
private int maximumPoolSize;
private long keepAliveTime;
private ThreadPoolExecutor threadPoolExecutor;
public ThreadPoolProxy(int corePoolSize,int maximumPoolSize,long keepAliveTime) {
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;
}
//要去执行的任务
public void execute(Runnable runnable){
if(runnable==null){
return;
}
if(threadPoolExecutor == null || threadPoolExecutor.isShutdown()){
threadPoolExecutor = new ThreadPoolExecutor(
//线程池核心线程数
corePoolSize,
//最大线程数
maximumPoolSize,
//保持线程时长
keepAliveTime,
//保持线程时长的单位
TimeUnit.MILLISECONDS,
//工作队列
new LinkedBlockingQueue<Runnable>(),
//线程工程的返回值结果
Executors.defaultThreadFactory(),
//处理
new AbortPolicy());
}
threadPoolExecutor.execute(runnable);
}
}
}
调用execute方法,传入runnable接口的实现类,run方法中执行在子线程中的代码
本文介绍如何使用子线程进行网络数据请求及UI更新,并详细讲解了线程池的创建、获取及管理方式,包括核心线程数、最大线程数等配置。
804

被折叠的 条评论
为什么被折叠?



