您的位置:首页 > 编程语言 > Java开发

java多线程读写文件实例

2017-10-25 14:17 399 查看
Java多线程读文件:

[java] view
plain copy

package com.myjava;  

import java.io.BufferedReader;  

import java.io.FileNotFoundException;  

import java.io.FileReader;  

import java.io.IOException;  

import java.util.ArrayList;  

import java.util.List;  

public class ThreadReadDemo {  

  

    /**Java多线程读大文件 

     * @param args 

     */  

    public static void main(String[] args) {  

        Thread t1=new Thread(new MultiThread(),"A");  

        Thread t2=new Thread(new MultiThread(),"B");  

        t1.start();  

        t2.start();  

    }  

  

}  

  

  

 class MultiThread implements Runnable{   

    private static BufferedReader br = null;  

    private List<String> list;  

      

    static{  

        try {  

            br = new BufferedReader(new FileReader("F://ThreadDemo.txt"),10);  

        } catch (FileNotFoundException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

    }  

      

    public void run() {  

        String line = null;  

        int count = 0;  

        while(true) {  

            //System.out.println(Thread.currentThread().getName());  

            this.list = new ArrayList<String>();  

            synchronized(br) {  

                try {  

                    while((line = br.readLine()) != null) {  

                        if(count<15) {  

                            list.add(line);  

                            count++;  

                        }else {  

                            list.add(line);  

                            count = 0;  

                            break;  

                        }  

                    }  

                } catch (IOException e) {  

                    e.printStackTrace();  

                }  

            }  

            try {  

                Thread.sleep(1);  

                display(this.list);  

            } catch (InterruptedException e) {  

                e.printStackTrace();  

            }  

            if(line == null)  

                break;  

        }  

          

          

    }  

      

    public void display(List<String> list) {  

        for(String str:list) {  

            System.out.println(str);  

        }  

        System.out.println(list.size());  

    }  

      

}  

java多线程写文件:

[java] view
plain copy

package com.myjava;  

  

import java.io.File;  

import java.io.FileNotFoundException;  

import java.io.FileOutputStream;  

import java.io.IOException;  

import java.util.concurrent.ConcurrentLinkedQueue;  

  

/** 

 * 多线程下写文件 

 *  

 * @author Administrator 

 *  

 */  

public class ThreadDemo {  

  

    public static void main(String[] args) {  

        File file=new File("F:"+File.separator+"ThreadDemo.txt");  

        try {  

            FileOutputStream out=new FileOutputStream(file, true);  

            ConcurrentLinkedQueue<String> queue=new ConcurrentLinkedQueue<String>();  

            for(int i=0;i<10;i++){  

                new Thread(new MyThread(queue,"线程"+i+",")).start();//多线程往队列中写入数据  

            }  

            new Thread(new DealFile(out,queue)).start();//监听线程,不断从queue中读数据写入到文件中  

            try {  

                Thread.sleep(3000);  

                if(!Thread.currentThread().isAlive()){  

                    System.out.println("线程已结束");  

                }  

            } catch (InterruptedException e) {  

                // TODO Auto-generated catch block  

                e.printStackTrace();  

            }  

              

        } catch (FileNotFoundException e) {  

            e.printStackTrace();  

        }  

          

    }  

}  

  

/** 

 * 将要写入文件的数据存入队列中 

 *  

 * @author Administrator 

 *  

 */  

class MyThread implements Runnable {  

    private ConcurrentLinkedQueue<String> queue;  

    private String contents;  

  

    public MyThread() {  

    }  

  

    public MyThread(ConcurrentLinkedQueue<String> queue, String contents) {  

        this.queue = queue;  

        this.contents = contents;  

    }  

  

    @Override  

    public void run() {  

        try {  

            Thread.sleep(100);  

        } catch (InterruptedException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

        queue.add(contents);  

    }  

}  

/** 

 * 将队列中的数据写入到文件 

 * @author Administrator 

 * 

 */  

class DealFile implements Runnable {  

    private FileOutputStream out;  

    private ConcurrentLinkedQueue<String> queue;  

  

    public DealFile() {  

    }  

  

    public DealFile(FileOutputStream out, ConcurrentLinkedQueue<String> queue) {  

        this.out = out;  

        this.queue = queue;  

    }  

  

    @Override  

    public void run() {  

        synchronized (queue) {  

            while (true) {  

                if (!queue.isEmpty()) {  

                    try {  

                        out.write(queue.poll().getBytes("UTF-8"));  

                    } catch (IOException e) {  

                        // TODO Auto-generated catch block  

                        e.printStackTrace();  

                    }  

                }  

                try {  

                    Thread.sleep(100);  

                } catch (InterruptedException e) {  

                    e.printStackTrace();  

                }  

            }  

        }  

  

    }  

  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: