以下代码就一个线程,现在我需要几个线程同时读文件,写文件,因为数据量会很大(几百万条数据)
请教如何用多线程实现
public class Test extends Thread {
public void run()
{
File f = new File("d://");
// String[] aa = f.list()
try {
String temp = "";
File rd = new File("d:\\1.txt");
File wt = new File("d:\\2.txt");
if (!wt.exists())// 如果文件不存,则建立
{
wt.createNewFile();
} else 
{
wt.delete();
wt.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(wt));
BufferedReader br = new BufferedReader(new FileReader(rd));
System.out.println(new java.util.Date());
while ((temp = br.readLine()) != null) {
char[] b = temp.toCharArray();
for (int i = 0; i < b.length; i++) {
if (b[i] != 'a') {
temp = temp.toLowerCase();
// System.out.println(temp);
// bw.write(temp,1,(temp.length()-1));
}
}
bw.write(temp);
bw.newLine();
}
System.out.println(new java.util.Date());
bw.flush();
br.close();
bw.close(); } catch (Exception e) {
e.printStackTrace();
} }

public static void main(String[] args) { new Test().start();

}
}

解决方案 »

  1.   

    供参照,注意文件访问冲突.
    http://community.csdn.net/Expert/topic/4451/4451389.xml?temp=.4527704
      

  2.   

    多线程中
    if (!wt.exists())// 如果文件不存,则建立
    {
    wt.createNewFile();
    } else 
    {
    wt.delete();
    wt.createNewFile();
    }
    这个肯定要同步的;要不就会多个县城同时建立文件了
      

  3.   

    BufferedWriter bw = new BufferedWriter(new FileWriter(wt));
    BufferedReader br = new BufferedReader(new FileReader(rd));
    System.out.println(new java.util.Date());
    while ((temp = br.readLine()) != null) {
    ==============
    这个读,如果是同一个文件读,读的时间应该只有一个线程读,所谓的临界资源,这里就是文件,当然写也是,对于临界资源的访问,应该采用互斥的策略