java 并发编程之上下文切换
来源:互联网 发布:管理系统常用算法 编辑:程序博客网 时间:2024/05/20 12:22
一:多线程执行的程序并不是同时执行的。
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);
}
}
测试结果:
当并发执行累加操作不超过百万次时,速度会比串行累加操作要慢。
- java 并发编程之上下文切换
- ucos-iii学习之上下文切换
- linux进程管理之上下文切换(context switching)
- Nucleus Task切换及中断之上下文保存
- Android之上下文菜单
- .NET组件程序设计之上下文
- 第十五章之上下文菜单
- hibernate之上下文初始化失败
- 文法系列之上下文无关语法简介
- flask源码剖析之上下文全局变量
- android基础学习之上下文菜单
- Android之上下文菜单(ContextMenu)
- Java并发编程 并发容器
- JAVA并发编程--并发模式
- JAVA并发-并发编程概述
- java并发编程----并发模型
- 【Java并发编程】并发集合
- 【Java并发编程】并发编程大合集
- devDependencies和dependencies的区别
- 用线程实现简单的定时扫描任务
- 权限系统--引言
- 【贪心算法(三)】并查集和克鲁斯卡尔算法
- C++ 智能指针详解
- java 并发编程之上下文切换
- 使用Matlab绘制星座图
- Eclipse 下'Publishing to Tomcat'has encountered a problem解决办法
- Doctype作用?严格模式与混杂模式如何区分?它们有何差异?
- 大学英语单词N
- JS原型、原型链深入理解
- 九度 题目1442:A sequence of numbers
- Java之static关键字
- JobControl的使用及获取计数器