1、代码:
package multiThread.art;
/**
* 测试:同样的逻辑,使用“并发”和使用“串行”的区别
*/
public class ConcurrencyTest {
private static final long count = 30000000L;
public static void main(String[] args) throws InterruptedException {
// 并发执行逻辑
concurrency();
// 串行化执行逻辑
serial();
}
/**
* 开启多个线程执行逻辑
* @throws InterruptedException
*/
private static void concurrency() throws InterruptedException {
/**
* 返回以毫秒为单位的当前时间。
* 注意:当返回值的时间单位是“毫秒”的时候,值的粒度取决于“底层操作系统”,并且粒度可能更大
*/
long start = System.currentTimeMillis();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int a = 0 ;
for( long i = 0 ; i < count ; i++){
a += 5 ;
}
}
});
// 启动子线程
thread.start();
int b = 0;
for( long i = 0 ; i < count ; i++){
b--;
}
// 等待 thread 线程终止
thread.join();
long time = System.currentTimeMillis() - start;
System.out.println("concurrecy : " + time +"ms");
}
/**
* 使用“串行化”执行逻辑
*/
private static void serial(){
long start = System.currentTimeMillis();
int a = 0;
for( long i = 0 ; i < count; i++){
a += 5;
}
int b= 0;
for(long i = 0 ; i < count ; i++){
b--;
}
long time = System.currentTimeMillis() - start;
System.out.println("serial :"+ time + "ms");
}
}
测试数据1: count 的值 “100 万 ~ 120 万之间”的时候,上面的“并发逻辑”与“串行化逻辑”执行时间相差在 0ms~ 1ms 左右;
执行结果: 并发执行时间 < 串行化执行时间 ;
并发执行时间 = 串行化执行时间 ;
并发执行时间 > 串行化执行时间 ;
备注: 以上三种结果均有可能出现
测试数据2: count 的值 “大于 200 万”的时候,上面的“并发逻辑”总比“串行化逻辑”执行所用的时间短。并且,count 的值越大,
“并发逻辑”的优势越明显。
友情提示:上面的代码和测试数据,仅是在本人电脑上的测试结果。如有疑问,欢迎来评论。