您的位置:首页 > 编程语言 > Java开发

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: