多线程运行速度

子线程类

public class Zi1 extends Thread {

    private long dateInTheEnd;

    public long getDateInTheEnd() {
        return dateInTheEnd;
    }

    @Override
    public void run() {
//        super.run();
        Integer a ;
        for (int i = 0; i < 100000; i++) {
            a = i;
            System.out.println("a = " + a);
        }
        dateInTheEnd = System.currentTimeMillis();
    }
}
public class Zi2 extends Thread {
    private long dateInTheEnd;
    public long getDateInTheEnd() {
        return dateInTheEnd;
    }
    @Override
    public void run() {
//        super.run();
        String b ;
        for (int i = 0; i < 100000; i++) {
            b = "求老仙奶我娶不到DYJ";
            System.out.println("b = " + b);
        }
        dateInTheEnd = System.currentTimeMillis();
    }
}
public class Zi3 extends Thread {
    private long dateInTheEnd;
    public long getDateInTheEnd() {
        return dateInTheEnd;
    }
    @Override
    public void run() {
//        super.run();


        for (int i = 0; i < 100000; i++) {
            StringBuilder cb =new StringBuilder();
            cb.append("玖妖永远是我大哥");
            cb.append(i);
            String c = cb.toString();
            System.out.println("c = " + c);
        }
        dateInTheEnd = System.currentTimeMillis();

    }
}

测试类

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {


        Zi1 z1 = new Zi1();
        Zi2 z2 = new Zi2();
        Zi3 z3 = new Zi3();
        Test te = new Test();
        Scanner sc = new Scanner(System.in);
        System.out.println("求单线程运行时间输入1;求多线程运行时间输入2");
        int c = sc.nextInt();
        if (c==2)
        te.priThrTime(z1,z2,z3);
        else if(c==1)
        te.priTime(z1,z2,z3);

    }

    public void priTime(Zi1 z1, Zi2 z2, Zi3 z3) {
        long l1 = System.currentTimeMillis();
        z1.run();
        long t1 = System.currentTimeMillis() - l1;

        long l2 = System.currentTimeMillis();
        z2.run();
        long t2 = System.currentTimeMillis() - l2;

        long l3 = System.currentTimeMillis();
        z3.run();
        long t3 = System.currentTimeMillis() - l3;

        long tSum = t1 + t2 + t3;


        System.out.print("单线程运行分别用时");
        System.out.print("  t1 = " + t1);
        System.out.print("  t2 = " + t2);
        System.out.print("  t3 = " + t3);
        System.out.println();

        System.out.println("单线程分部合计用时  " + tSum);
    }

    public void priThrTime(Zi1 z1, Zi2 z2, Zi3 z3) {

        long lt = System.currentTimeMillis();

        z1.start();

        z2.start();

        z3.start();

        try

        {
            Thread.sleep(6000);
        } catch (
                InterruptedException e)

        {
            e.printStackTrace();
        }

        long zt1 = z1.getDateInTheEnd();
        long zt2 = z2.getDateInTheEnd();
        long zt3 = z3.getDateInTheEnd();

        long tt1 = zt1 - lt;
        long tt2 = zt2 - lt;
        long tt3 = zt3 - lt;


        System.out.print("多线程并发分别用时");
        System.out.print("  tt1 = " + tt1);
        System.out.print("  tt2 = " + tt2);
        System.out.print("  tt3 = " + tt3);
        long tt;
        long ta = tt1;//如果不将数据转存到新变量里,比较时间长短是会出未知bug
        long tb = tt2;//如果不将数据转存到新变量里,比较时间长短是会出未知bug
        long tc = tt3;//如果不将数据转存到新变量里,比较时间长短是会出未知bug
        if (ta >= tb && ta >= tc)

        {
            tt = ta;
        } else

        {
            tt = tb >= tc ? tb : tc;
        }
        System.out.println();
        System.out.println("多线程运行整体完成用时" + tt);
    }
}

运行结果

输入1

······
单线程运行分别用时  t1 = 518  t2 = 724  t3 = 521
单线程分部合计用时  1763

输入2

······
多线程并发分别用时  tt1 = 1440  tt2 = 1020  tt3 = 1880
多线程运行整体完成用时1880

用时差不多鸭···

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值