一:多线程执行的程序并不是同时执行的。
CPU给每个线程分配cpu时间片来实现多线程的机制。时间片是cpu给每个线程分配的时间。因为时间片非常短,所以cpu通过不停的切换线程执行,让我们感觉多个线程是同时执行的,时间片一般为几十毫秒。
二: 什么是上下文切换?
任务从保存到再加载的过程就是一次上下文切换。
三:上下文切换产生的问题?
影响多线程的执行速度。
四:并发执行不一定比串行执行快。因为线程有创建和上下文切换的开销。
五:测试案例:
package com.yykj.thread;
/**
* Created by admin on 2017/9/8.
*/
public class ConcurrencyTest {
private static final long count=10000l;
public static void main(String[] args){
}
/**
* @Title: 并执
* @Description: (并执)
* @param null
* @return
* @author 陈晓阳
* @date 2017/9/8
* @throws
*/
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.join();
long time=System.currentTimeMillis()-start;
System.out.print("concurrency:"+time+"ms,b="+b);
}
/**
* @Title:
* @Description: (串执)
* @param null
* @return
* @author 陈晓阳
* @date 2017/9/8
* @throws
*/
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.print("serial:"+time+"ms,b="+b+",a="+a);
}
}
测试结果:
当并发执行累加操作不超过百万次时,速度会比串行累加操作要慢。