討論區快速選單
知識庫快速選單
用最高效的方式管理MySQL 全方位AWS解決方案完整培訓
[ 回上頁 ] [ 討論區發言規則 ]
JAVA 計算執行緒花費時間
更改我的閱讀文章字型大小
作者 : k32367mdbf(k32367mdbf)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2016/5/25 下午 12:56:16
請問各位神人大大,小弟想用JAVA計算執行緒的執行時間

具體內容主要是想用多執行緒處理矩陣相乘的問題,並計算從開始第一個執行緒到執行完最後一個執行緒之間經過的時間

小弟讓每個執行緒計算相乘後某個元素的值,比如一個n*m的矩陣A乘上m*p的矩陣B會等於一個n*p的矩陣C,總共會有n*p個執行緒,其中第むiめむjめ個執行緒就會計算第C的第むiめむjめ個元素的值

程式碼如下:

import java.util.*;
import java.io.*;

//矩陣抽象類別
abstract class MatrixMultiple
{
protected static int n,m,p;
public MatrixMultiple(int n1,int n2,int n3)
{
n=n1;
m=n2;
p=n3;
}
}

//Concurrency類別
class Concurrency extends MatrixMultiple implements Runnable
{
protected int row,col;
protected int[] a,b;
protected static int[][] c;
public Concurrency(int n1,int n2,int n3,int[][] a1,int[][] a2,int n4,int n5)
{
super(n1,n2,n3);
a=new int[n2];
b=new int[n2];
c=new int[n1][n3];
row=n4;
col=n5;
for(int i=0;i<n2;i++)
{
int s;
a[i]=a1[n4][i];
b[i]=a2[i][n5];
}
}
public void run()
{
for(int i=0;i<m;i++)
{
c[row][col]+=a[i]*b[i];
System.out.printf("%d %d run\n",row,col); //顯示此執行緒開始執行
}
}
}

public class timer
{
public static void main(String args[]) throws IOException
{
FileReader fr = new FileReader("input.txt"); //連結檔案
BufferedReader br = new BufferedReader(fr); //啟用Buffer
Scanner in =new Scanner(br); //連結輸入流

//讀入n,m
int n,m;
n=in.nextInt();
m=in.nextInt();

//讀入矩陣
int a[][]=new int[n][m];
int b[][]=new int[m][n];

for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
a[i][j]=in.nextInt();

for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
b[i][j]=in.nextInt();

//建立物件
Concurrency concurrency[][]= new Concurrency[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
concurrency[i][j]=new Concurrency(n,m,n,a,b,i,j);

//建立執行緒
Thread t[][]=new Thread[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
t[i][j]=new Thread(concurrency[i][j]);

//執行&算時間
long concurrencyStart,concurrencyFin;

concurrencyStart=System.currentTimeMillis();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
t[i][j].start();
concurrencyFin=System.currentTimeMillis();

System.out.println(concurrencyStart); //顯示開始時間
System.out.println(concurrencyFin); //顯示結束時間

fr.close(); //關閉檔案串流
}
}
而執行結果如下:

0 0 run
1 1 run
1 1 run
1464149482319 <-迴圈開始跑
1464149482319 <-迴圈跑完
1 0 run
0 1 run
1 0 run
0 0 run
0 1 run


小弟想問的是: 有沒有辦法能取得"最後一個執行緒跑完的時間點"?
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4468 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2016/8/24 上午 10:59:00
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html
 板主 : 風月
 > Java入門一般區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Java入門一般區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Java入門一般區
1 洋將 2410 
2 Aron 2130 
3 Aries 1510 
4 DEMO999 1310 
5 Ben 990 
6 ramb 620 
7 ozzy 570 
8 tand 460 
9 Huah 410 
10 vindy 400 
Java入門一般區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125