多线程程序在单核CPU下运行,耗时为0毫秒是什么原因?
package test;/** * @Title: MultiThreadMatrix.java * @Package matrix * @Description: 多线程计算矩阵乘法 * @author Aloong * @date 2010-10-28 下午09:45:56 * @version V1.0 */ import java.util.Date;public class MultiThreadMatrix{ static int[][] matrix1; static int[][] matrix2; static int[][] matrix3; static int m,n,k; static int index; static int threadCount; static long startTime; public static void main(String[] args) throws InterruptedException { //矩阵a高度m=100宽度k=80,矩阵b高度k=80宽度n=50 ==> 矩阵c高度m=100宽度n=50 m = 1024; n = 1024; k = 1024; matrix1 = new int[m][k]; matrix2 = new int[k][n]; matrix3 = new int[m][n]; //随机初始化矩阵a,b fillRandom(matrix1); fillRandom(matrix2); startTime = new Date().getTime(); //输出a,b// printMatrix(matrix1); // printMatrix(matrix2); //创建线程,数量 <= 4 for(int i=0; i<4; i++) { if(index < m) { Thread t = new Thread(new MyThread()); t.start(); }else { break; } } //等待结束后输出 while(threadCount!=0) { Thread.sleep(20); } // printMatrix(matrix3); long finishTime = new Date().getTime(); System.out.println("计算完成,用时"+(finishTime-startTime)+"毫秒"); } static void printMatrix(int[][] x) { for (int i=0; i<x.length; i++) { for(int j=0; j<x[i].length; j++) { System.out.print(x[i][j]+" "); } System.out.println(""); } System.out.println(""); } static void fillRandom(int[][] x) { for (int i=0; i<x.length; i++) { for(int j=0; j<x[i].length; j++) { //每个元素设置为0到99的随机自然数 x[i][j] = (int) (Math.random() * 100); } } } synchronized static int getTask() { if(index < m) { return index++; } return -1; }}class MyThread implements Runnable{ int task; @Override public void run() { MultiThreadMatrix.threadCount++; while( (task = MultiThreadMatrix.getTask()) != -1 ) { //System.out.println("进程: "+Thread.currentThread().getName()+"\t开始计算第 "+(task+1)+"行"); for(int i=0; i<MultiThreadMatrix.n; i++) { for(int j=0; j<MultiThreadMatrix.k; j++) { MultiThreadMatrix.matrix3[task][i] += MultiThreadMatrix.matrix1[task][j] * MultiThreadMatrix.matrix2[j][i]; } } } MultiThreadMatrix.threadCount--; }}