java多线程的处理和串行处理的效率比较以及结果
2016-05-23 11:08
477 查看
多线程还是单线程处理任务需要关注的内容是单个任务执行消耗的时间,下面以一个公式进行说明,假设一个任务的执行时间为T(progress),线程切换的平均时间为T(change),任务执行时间所占的比例 S=T(progress)/(T(progress) +T(change) ),S比例越高(任务执行时间越长),说明对当前任务单独开辟一个线程的更有意义,如果一个任务执行时间很小,那么就完全没有必要为这个任务单独开辟一个线程进行处理
ps:自己编写的多线程和单线程的处理时间的程序
import
java.util.*;
public
class
baseExample
{
private
static
final
long
count=1000000;
private
static
final
int
num=2000;
public
static
void
main(String[]
args){
long
start
= System.currentTimeMillis
();
for(int
i
=0;i
<num;i++){
concurrency();
[align=left] }[/align]
double
timeCon
= Double.parseDouble(String.valueOf(System.currentTimeMillis()-
start));
//多线程处理任务时间
System.
out.println("concurrency
time:"+(timeCon/num));
long
serial
= System.currentTimeMillis
();
for(int
i
=0;i
<num;i++){
serial();
[align=left] }[/align]
double
timeSerial
= Double.parseDouble(String.valueOf(System.currentTimeMillis()-
serial));
//单线程的处理任务时间
System.
out.println("serial
time:"+(timeSerial/num));
[align=left] }[/align]
//多线程的测试例子
public
static
void
concurrency(){
try{
[align=left] [/align]
Thread
thread=
new
Thread(new
Runnable(){
public
void
run(){
int
a
=0;
for(long
i
=0;i
<count;i++){
a+=5;
[align=left] }[/align]
[align=left] }[/align]
[align=left] });[/align]
thread.start();
int
b
=0;
for(long
i
=0;i
<count;i++){
b--;
[align=left] }[/align]
thread.join();
}
catch(Exception
e
){
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
//单线程的处理任务的例子
public
static
void
serial(){
int
a
=0;
for(long
i
=0;i
<count;i++){
a+=5;
[align=left] }[/align]
int
b
=0;
for(long
i
=0;i
<count;i++){
b--;
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
ps:自己编写的多线程和单线程的处理时间的程序
import
java.util.*;
public
class
baseExample
{
private
static
final
long
count=1000000;
private
static
final
int
num=2000;
public
static
void
main(String[]
args){
long
start
= System.currentTimeMillis
();
for(int
i
=0;i
<num;i++){
concurrency();
[align=left] }[/align]
double
timeCon
= Double.parseDouble(String.valueOf(System.currentTimeMillis()-
start));
//多线程处理任务时间
System.
out.println("concurrency
time:"+(timeCon/num));
long
serial
= System.currentTimeMillis
();
for(int
i
=0;i
<num;i++){
serial();
[align=left] }[/align]
double
timeSerial
= Double.parseDouble(String.valueOf(System.currentTimeMillis()-
serial));
//单线程的处理任务时间
System.
out.println("serial
time:"+(timeSerial/num));
[align=left] }[/align]
//多线程的测试例子
public
static
void
concurrency(){
try{
[align=left] [/align]
Thread
thread=
new
Thread(new
Runnable(){
public
void
run(){
int
a
=0;
for(long
i
=0;i
<count;i++){
a+=5;
[align=left] }[/align]
[align=left] }[/align]
[align=left] });[/align]
thread.start();
int
b
=0;
for(long
i
=0;i
<count;i++){
b--;
[align=left] }[/align]
thread.join();
}
catch(Exception
e
){
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
//单线程的处理任务的例子
public
static
void
serial(){
int
a
=0;
for(long
i
=0;i
<count;i++){
a+=5;
[align=left] }[/align]
int
b
=0;
for(long
i
=0;i
<count;i++){
b--;
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
相关文章推荐
- hdfs下载出现Exception in thread "main" java.lang.NullPointerException
- java修饰符简单总结,this关键字的不完全理解.
- Spring 事务机制详解
- eclipse导入工程中文乱码问题
- ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
- 通过org.springframework.web.filter.CharacterEncodingFilter定义Spring web请求的编码
- eclipse下新建Maven项目index.xml文件报错
- java入门、java学习:如何理解Java面向对象
- 最大回文子串(java)
- 多个Form提交同一地址技巧(form序列化提交 java反序列化表单)
- 个人学习-java-多线程
- java同步锁中sychronized和Lock接口类的区别
- java学习笔记-JavaWeb篇二
- java之google style
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- MyEclipse文件查找技巧总结
- 接入支付宝即时到账接口-java
- MVC+EF+Spring.Net代码生成器
- java的同步机制synchronized
- java多线程