子线程类
public class Zi1 extends Thread {
private long dateInTheEnd;
public long getDateInTheEnd() {
return dateInTheEnd;
}
@Override
public void 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() {
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() {
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
用时差不多鸭···