码迷,mamicode.com
首页 > 编程语言 > 详细

java利用线程池优化程序

时间:2020-05-27 10:35:14      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:回车   throw   举例   ack   按钮   shutdown   return   www   配置文件   

1、提升程序加载速度

2、几种线程的创建方法

3、实用举例【这里实用线程池创建将要被实用的对象,然后被实用的类则实现call方法,返回该类对象】

技术图片
//v2.0新增利用线程创建,发现加载更快了
    {
        // 获取当前程序运行时对象
        Runtime run = Runtime.getRuntime();
        // 调用垃圾回收机制,以减少内存误差
        run.gc();
        // 获取当前JVM的空闲内存
        long freeMemory = run.freeMemory();
        // 系统当前时间
        long timePro = System.currentTimeMillis();
        ExecutorService service = Executors.newFixedThreadPool(2);
        // 线程池创建并执行1000个线程
        for (int i = 0; i < 1000; i++) {
            try {
                service.submit(new ReadConfigFile());
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        System.out.println("使用线程池创建1000个线程所需要占用的内存大小: "
                + (freeMemory - run.freeMemory()));
        // 线程池使用完成,关闭线程池
        service.shutdown();
        System.out.println("使用线程池创建并运行1000个线程需要的时间为: "
                + (System.currentTimeMillis() - timePro));

    
    }//线程池结束
View Code

以上代码service.submit(new ReadConfigFile());种的new ReadConfigFile()是我读取文件的类,在其中实现了call()方法,如下:

技术图片
package com.writer;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.concurrent.Callable;

//读取配置文件的类
public class ReadConfigFile implements Callable {
    File file = null;
    FileInputStream fis = null;
     BufferedInputStream bis = null;
    public ReadConfigFile() throws IOException{
        this.file  = new File("C:/menu.txt");
        this.fis = new FileInputStream(file);
        this.bis = new BufferedInputStream(fis);
    }
    
    public String[] getFileContent(){    
        try{
            long begin = System.currentTimeMillis();
             byte[] buffer = new byte[1024];
             String []result = null;
             int cnt = 0;
             while((cnt=bis.read(buffer)) != -1) {
                 String bluck = new String(buffer, 0, cnt);
                 result = bluck.split("\r\n");//在windows中回车换行必须这样写
                 System.err.print(result[1]);
                }
                System.out.println("=====BufferIStream===== time: " + (System.currentTimeMillis() - begin) + "ms");
            return result;
        }catch(Exception e){
            System.err.print(e);
            return null;
        }finally{
            close();
        }        
    }
    public void close(){
        try {
            bis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    public Object call() throws Exception {
        // TODO Auto-generated method stub
        return this;
    }
    //测试
    public static void main(String[] args) throws IOException {
        ReadConfigFile txt = new ReadConfigFile();
        String a[] = txt.getFileContent();
        for (int i=0;i<a.length;i++) {
            if(i%2!=0)
            System.out.print(a[i]);
        }

    }
}
View Code

注意:每次使用线程池创建的对象时,只需要调用被使用的类的get()方法获取对象,再使用方法即可。

我使用的是读取文档0,2,4,6...偶数行作为按钮的名称,1,3,5..奇数行作为执行路径,根据读取的配置动态创建按钮,及事件,该类略。

java利用线程池优化程序

标签:回车   throw   举例   ack   按钮   shutdown   return   www   配置文件   

原文地址:https://www.cnblogs.com/ciscolee/p/12970949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!