在网上看到一道网试题,手痒痒实现了一下,呵呵。
使用Java多线程实现下述算法:
输入:整数组成的m*n的矩阵A。(m=100000, n=10000)
输出:一个数列B,数列B中的每一项为矩阵A中对应列数字之和。
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> 1 package com.base.multithread;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.Scanner;
7
8 public class PrintMatrix {
9
10 public static volatile int count = 0;
11
12 class ComputeRunnable implements Runnable
13 {
14 private int[][] values = null;
15 private int[] results = null;
16 private int colIndex = 0;
17
18 public void init(int[][] values,int colIndex,int[] results)
19 {
20 this.values = values;
21 this.colIndex = colIndex;
22 this.results = results;
23
24 }
25
26 public void run() {
27 int sum = 0;
28 for(int i = 0 ;i < values.length;i++)
29 {
30 sum = sum + values[i][colIndex];
31 }
32 results[colIndex] = sum;
33 count++;
34 }
35
36 }
37 /**
38 * @param args
39 * @throws IOException
40 * @throws InterruptedException
41 */
42 public static void main(String[] args) throws IOException, InterruptedException {
43 int m = 0;
44 int n = 0;
45 PrintMatrix pm = new PrintMatrix();
46 System.out.print("Print input m(matrix row):");
47 Scanner scanner = new Scanner(System.in);
48 String srow = scanner.nextLine();
49 System.out.print("Print input n(matrix col):");
50 String scol = scanner.nextLine();
51 m = new Integer(srow).intValue();
52 n = new Integer(scol).intValue();
53 int[][] arrys = new int[m][n];
54 System.out.println("please input " + m +" * " + n +" matrix,each column with space split:");
55 List<String> lines = new ArrayList<String>();
56 int index = 0;
57 while(scanner.hasNextLine())
58 {
59 lines.add(scanner.nextLine());
60 index++;
61 if(index==m)
62 break;
63 }
64 //未检查输入正确性
65 for( int i = 0 ;i < m;i++)
66 {
67 String line = lines.get(i);
68 String[] lineArray = line.split(" ");
69 for( int j = 0 ;j < n;j++)
70 {
71 arrys[i][j] = new Integer(lineArray[j]).intValue();
72 }
73 }
74 int[] results = new int[n];
75 for( int i = 0;i < n ;i++)
76 {
77 ComputeRunnable r = pm.new ComputeRunnable();
78 r.init(arrys,i,results);
79 Thread t = new Thread(r);
80 t.start();
81 }
82 while(true)
83 {
84 if(count == n)
85 break;
86 }
87 for(int i = 0; i < n;i++)
88 System.out.println("|" + results[i] + "|");
89 }
90
91
92 }
93
分享到:
相关推荐
java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号
Java多线程实现异步调用实例。运行Main可以看到结果。main是主线程,另有A,B,C三个线程用不同的时间跑完。
java多线程小程序实例 java多线程小程序实例
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制
java一些简单的多线程用法,适合初学者
java多线程实现TCP连接UDP聊天的聊天程序
适合初学者使用,Java多线程技术实现矩阵乘积计算
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
Java多线程实现.pdf
该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!
java多线程实现生产者和消费者
java多线程实现一个控制台聊天室 java多线程实现一个控制台聊天室
java的多线程典型应用示例,利用多线程实现小球的运动。代码完整,易读。
用java平台利用java的多线程特点,编写进度条的现实以及当前时间的实时更新。
当用户在“命令”后的文本框中输入“start clock”后,“现在的时间是”后的文本框开始显示系统时钟;当用户输入“stop clock”后,时钟终止显示...如,输入“change 我可爱的小时钟”后,字幕变为“我可爱的小时钟”。
java多线程进度条
利用java技术实现多线程文件传输
现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。...本文档提供Java多线程编程经验,方便广大Java爱好者研究学习Java多线程
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...