Java 线程与进程的速度比较(继承Thread实现)

来源:互联网 发布:美工主管岗位职责 编辑:程序博客网 时间:2024/06/02 05:21

一,简介

1,本篇通过一个实例,简单的看下通过进程与线程实现同样的工作,效率上是有差别的。

2,要实现的工作是,写100个文件。

二,知识点

1,实现线程非常简单,通过继承Thread类即可,继承后的run()方法会在单独的线程中跑。

2,可以通过System.currentTimeMillis()获取当前时间精确到毫秒,通过程序运行前后时间相减即可获取程序运行时间。

三,代码实现

1,不通过线程,直接写一个文件,注意写的内容稍微多一点。

package com.maoge.thread;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class WriteFileMethod {    private String filename;    public WriteFileMethod(String filename){        this.filename=filename;    }    public void run() {        byte buffer[]=new byte[1000000];        OutputStream out=null;        try {            out = new FileOutputStream(filename);            out.write(buffer, 0, buffer.length);        } catch (Exception ex) {            System.out.println(ex.toString());        }finally{            try {                out.close();            } catch (IOException ioEx) {                System.out.println(ioEx.toString());            }        }       } }

2,通过线程写文件

package com.maoge.thread;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class WriteFileThread extends Thread{    private String filename;    public WriteFileThread(String filename){        this.filename=filename;    }    @Override    public void run() {        byte buffer[]=new byte[1000000];        OutputStream out=null;        try {            out = new FileOutputStream(filename);            out.write(buffer, 0, buffer.length);        } catch (Exception ex) {            System.out.println(ex.toString());        }finally{            try {                out.close();            } catch (IOException ioEx) {                System.out.println(ioEx.toString());            }        }       } }

3,测试类

package com.maoge.thread;public class WriteFileTest {    public static void main(String[] args) {        runMethod();        runThread();        }    public static void runMethod(){        long startTime=System.currentTimeMillis();        for(int i=0;i<50;i++)        {            WriteFileMethod writeFile=new WriteFileMethod("D:\\temp\\"+i+".txt");            writeFile.run();        }        long endTime=System.currentTimeMillis();        System.out.println("runMethod"+(endTime-startTime));    }    public static void runThread(){        long startTime=System.currentTimeMillis();        for(int i=0;i<50;i++)        {            WriteFileThread writeFile=new WriteFileThread("D:\\temp\\"+(i+500)+".txt");            writeFile.start();        }        long endTime=System.currentTimeMillis();        System.out.println("runThread"+(endTime-startTime));    }}

四,结果分析

运行结果如下(多次结果)

runMethod65runThread28runMethod64runThread33//更换方法顺序测试runThread20runMethod92runThread47runMethod63

哈哈,这个比较逻辑其实有一个明显的大BUG,不知道你发现了没有。不管怎么样,至少该程序证明了,使用线程起码不会浪费主线程太多时间。