简单使用线程池

Executors工厂类中有很多静态方法用于创建线程池。下面简单的介绍其中几种使用:
newFixedThreadPool:创建指定线程数的线程池,通常设定的线程数根据系统资源设置。
newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理需要,可以回收空闲的线程,若线程数不够处理需要,则创建新的线程。
newScheduledThreadPool:创建定长线程池,可以定时以及周期性执行任务。

newSingleThreadExecutor:创建一个单线程线程池,只用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

下面简单的使用线程池下载网页和图片。

/**
 * Created by diy_os on 2016/11/7.
 */
public interface Response {
    public void callbackHTML(String s);
    public void callbackPIC(byte[] bytes);
}

public class httpdownload {
    public static void getHttp(Response response){
        try {
            URL url = new URL("http://www.baidu.com");
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(6000);
            InputStream in = connection.getInputStream();
            BufferedReader  reader = new BufferedReader(new InputStreamReader(in));
            String s;
            StringBuilder builder = new StringBuilder();
            while ((s = reader.readLine())!=null){
                builder.append(s);
            }
            if(builder != null){
                response.callbackHTML(builder.toString());
            }else {
              response.callbackHTML(null);
            }
            in.close();

            String url2 = "http://m2.quanjing.com/2m/sps009/4251r-4561.jpg";
            url = new URL(url2);
            connection.disconnect();
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(6000);
            InputStream input = connection.getInputStream();

//            byte bytes[] = new byte[1024];
//            FileOutputStream write = new FileOutputStream(new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/down.jpg"),true);
//
//            while (input.read(bytes,0,1024)!=-1){
//                write.write(bytes);
//            }
//            input.close();
//            write.close();
            byte bytes[] = readInputStream(input);
            response.callbackPIC(bytes);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }

}

public class FixedThreadPool {
    public static void main(String[] args) {
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
        fixedThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                httpdownload.getHttp(new Response() {
                    @Override
                    public void callbackHTML(String s) {
                        System.out.print(s.toString());
                        File file = new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/file.txt");
                       /* File newfile = new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/d");   用于创建一个新的文件夹
                        newfile.mkdir();
                        */
                        try {
                            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
                            writer.write(s);
                            writer.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    public void callbackPIC(byte[] bytes) {
                        try {
                            FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
                            write.write(bytes);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        });
    }
}

public class CachedThreadPool {
    public static void main(String[] args){
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
            cachedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    httpdownload.getHttp(new Response(){
                        @Override
                        public void callbackHTML(String s) {
                            System.out.print(s.toString());
                            File file = new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/file.txt");
                            try {
                                OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
                                writer.write(s);
                                writer.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }

                        @Override
                        public void callbackPIC(byte[] bytes) {
                            try {
                                FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
                                write.write(bytes);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });
                }
            });

    }
}

public class ScheduledThreadPool {
    public static void main(String[] args){
        ScheduledExecutorService scheduledExecutorService =
                Executors.newScheduledThreadPool(5);
        scheduledExecutorService.schedule(new Runnable() {
            @Override
            public void run() {
                httpdownload.getHttp(new Response(){
                    @Override
                    public void callbackHTML(String s) {
                        System.out.print(s.toString());
                        File file = new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/file.txt");
                        try {
                            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
                            writer.write(s);
                            writer.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void callbackPIC(byte[] bytes) {
                        try {
                            FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
                            write.write(bytes);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        },3, TimeUnit.SECONDS);
    }
}

public class SingleThreadExecutor {
    public static void main(String[] args) {
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
        singleThreadExecutor.execute(new Runnable() {
            @Override
            public void run() {
                httpdownload.getHttp(new Response() {
                    @Override
                    public void callbackPIC(byte[] bytes) {
                        try {
                            FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
                            write.write(bytes);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    public void callbackHTML(String s) {
                        System.out.print(s.toString());
                        File file = new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/file.txt");
                        try {
                            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
                            writer.write(s);
                            writer.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值