多线程写一个资料,回字的3个写法

来源:互联网 发布:强制签名元素数据出错 编辑:程序博客网 时间:2024/05/02 02:16

参考地址:http://www.verydemo.com/demo_c134_i14238.html

多线程写一个文件,回字的3个写法
import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.ReentrantLock;import org.apache.commons.io.IOUtils;public class MuFile implements Runnable{static File file = new File("D:\\log6666666.txt");private int chunk;private static final ReentrantLock lock = new ReentrantLock();public MuFile(int chunk){this.chunk=chunk;}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubif(!file.exists()){try {file.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{file.delete();}List<Thread> tl = new ArrayList<Thread>();for(int i=0;i<5;i++){Thread m = new Thread(new MuFile(i));m.setName("QJW"+i);tl.add(m);m.start();}for(int i=0;i<tl.size();i++){Thread m =tl.get(i);try {m.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void run() {List<String> lines = new ArrayList<String> ();String tname = Thread.currentThread().getName();try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}for(int j=0;j<3;j++){lines.add(tname+" line "+j);}write(lines,chunk);//write2(lines,chunk);//write3(lines,chunk);}void write(List<String> lines,int chunk) {synchronized (file) {//File file = new File("D:\\sample4final.txt");FileWriter fw = null;BufferedWriter bw = null;try {fw = new FileWriter(file, true);bw = new BufferedWriter(fw);String tname = Thread.currentThread().getName();if (!lines.isEmpty()) {IOUtils.write(chunk+"  -"+tname+"    start:    \n", bw);IOUtils.writeLines(lines, null, bw);IOUtils.write(chunk+"  -"+tname+"    end:     \n", bw);bw.flush();}} catch (IOException e) {// TODO Auto-generated catch blockthrow new RuntimeException(e);} finally {IOUtils.closeQuietly(bw);IOUtils.closeQuietly(fw);}}}void write2(List<String> lines,int chunk) {//File file = new File("D:\\sample4final.txt");FileWriter fw = null;BufferedWriter bw = null;try {fw = new FileWriter(file, true);bw = new BufferedWriter(fw);String tname = Thread.currentThread().getName();if (!lines.isEmpty()) {IOUtils.write(chunk+"  -"+tname+"    start:    \n", bw);IOUtils.writeLines(lines, null, bw);IOUtils.write(chunk+"  -"+tname+"    end:     \n", bw);bw.flush();}} catch (IOException e) {// TODO Auto-generated catch blockthrow new RuntimeException(e);} finally {IOUtils.closeQuietly(bw);IOUtils.closeQuietly(fw);}}void write3(List<String> lines,int chunk) {lock.lock();  // block until condition holds//File file = new File("D:\\sample4final.txt");FileWriter fw = null;BufferedWriter bw = null;try {fw = new FileWriter(file, true);bw = new BufferedWriter(fw);String tname = Thread.currentThread().getName();if (!lines.isEmpty()) {IOUtils.write(chunk+"  -"+tname+"    start:    \n", bw);IOUtils.writeLines(lines, null, bw);IOUtils.write(chunk+"  -"+tname+"    end:     \n", bw);bw.flush();}} catch (IOException e) {// TODO Auto-generated catch blockthrow new RuntimeException(e);} finally {IOUtils.closeQuietly(bw);IOUtils.closeQuietly(fw);lock.unlock();}}}
0 0
原创粉丝点击