java多執行緒的處理和序列處理的效率比較以及結果
阿新 • • 發佈:2018-12-26
多執行緒還是單執行緒處理任務需要關注的內容是單個任務執行消耗的時間,下面以一個公式進行說明,假設一個任務的執行時間為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();
}
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();
}
double
timeSerial
= Double.parseDouble(String.valueOf(System.currentTimeMillis ()-
serial));
//單執行緒的處理任務時間
System.
out.println("serial
time:"+(timeSerial/num));
}
//多執行緒的測試例子
public
static
void
concurrency(){
try{
Thread
thread=
new
Thread(new
Runnable(){
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();
}
catch(Exception
e
){
}
}
//單執行緒的處理任務的例子
public
static
void
serial(){
int
a
=0;
for(long
i
=0;i
<count;i++){
a+=5;
}
int
b
=0;
for(long
i
=0;i
<count;i++){
b--;
}
}
}