我有一个调用两个类的方法的Java代码。像以下,Java线程代码问题
import java.io.*;
class Example
{
public static void main(String args[])
{
try{
FileOutputStream fos = new FileOutputStream("1.dat");
DataOutputStream dos = new DataOutputStream(fos);
for(int i =0 ; i < 100 ; i++){
dos.writeInt(i);
}
dos.close();
FileOutputStream fos1 = new FileOutputStream("2.dat");
DataOutputStream dos1 = new DataOutputStream(fos1);
for(int i =100 ; i < 200 ; i++){
dos1.writeInt(i);
}
dos1.close();
Exampless ex = new Exampless();
ex.createArray(0);
ex.ReadData("1.dat");
ex.ReadData("2.dat");
}catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
}
class Exampless{
public static int []arr = new int [100] ;
void createArray(int z){
for(int i =z ; i < z+100 ; i++)
arr[i-z] = i ;
}
public synchronized void ReadData(String name){
try{
int cnt = 0;
FileInputStream fin = new FileInputStream(name);
DataInputStream din = new DataInputStream(fin);
for(int i = 0 ; i < 100 ; i++){
int c = din.readInt();
if(c == arr[i])
cnt++ ;
}
System.out.println("File name: " + name + " No. of Matches: " + cnt) ;
}catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
}
在第一方法中,代码将创建一个共享的阵列和在第二方法中,将其与一个文件进行比较。
现在,我想以并行方式运行这两个ReadData()
方法,使用多个线程。任何人都可以帮助我做到这一点。可能与一些代码修改。
你们是不是并行运行一次在两个独立的数据集的工作(以更好地利用多核处理器,例如),或者是你想获得两个线程在一组数据上工作(这更麻烦)? – Bobulous 2012-07-29 18:11:19
哪两个?你的意思是'createArray'和'ReadData'?还是你想用不同的参数多次调用'ReadData'?在后一种情况下,我会建议同步对数组“arr”的访问。例如。使用[ReadWriteLock](http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/locks/ReadWriteLock.html)。 – 2012-07-29 18:11:54
@ user1515834,我想用它来更好地使用多核处理器。正如你所看到的,不需要同步。 – Arpssss 2012-07-29 18:12:53