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

Java 单线程写文件 多线程读文件

2014-08-04 13:11 369 查看
package com.ctrip.bi.dbd.main;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import
java.util.concurrent.Executors;import com.ctrip.bi.dbd.entity.SimilarityAlgorithm;import com.ctrip.bi.dbd.entity.ValueClass;import com.ctrip.bi.dbd.mgr.DbdUtils;public class FileIO_MultiThreads {DbdUtils db = new DbdUtils("./customer", "testdb", true, ValueClass.class);File
file = new File("D:\\time.txt");private BlockingQueue queue = new ArrayBlockingQueue(900000);SimilarityAlgorithm sa = new SimilarityAlgorithm();static ExecutorService service = Executors.newFixedThreadPool(300);public static void main(String[] args) throws
InterruptedException {new FileIO_MultiThreads().testThreads();service.shutdown();}// test threadspublic void testThreads() throws InterruptedException {try {readFile();System.out.println("size :" + queue.size());} catch (IOException e) {// TODO Auto-generated
catch blocke.printStackTrace();}for (int i = 0; i < 300; i++) {service.submit(new ReadFileThread());}}public void readFile() throws IOException, InterruptedException {BufferedReader br = new BufferedReader(new FileReader(file));String line = null;try {int
i = 0;while ((line = br.readLine()) != null && i <= 1000) {queue.offer(line);i++;}} catch (IOException e1) {e1.printStackTrace();} finally {br.close();}}private class ReadFileThread implements Runnable {ValueClass value = null;@Overridepublic void run() {long
start = System.nanoTime();String key = null;long eachTime = 0, avg = 0, sum = 0;float xPrice = 0.1f, xStar = 0.2f, yPrice=0f, yStar;double similarity = 0;while ((key = queue.poll()) != null) {long start2 = System.nanoTime();for (int j = 0; j < 100; j++) {long
startt= System.nanoTime();value = (ValueClass) db.getValue(key);yPrice = value.getPrice();yStar = value.getStar();similarity = sa.simiAlgorithm(xPrice, xStar, yPrice, yStar);System.out.println("ThreadID==>" + Thread.currentThread().getId()+ " pre cost:"+(
System.nanoTime()-startt)/1000);}long end2 = System.nanoTime();eachTime = (end2 - start2) / 1000;sum = sum + eachTime; System.out.println("ThreadID==>" + Thread.currentThread().getId() + "Similarity: " + similarity + " Time cost:" + eachTime + "μs"); /*System.out.println("ThreadID==>"+
Thread.currentThread().getId() + " yPrice: " + yPrice+ " Time cost:" + (end2 - start2) / 1000 + "μs");*/}System.out.println("Average time for each:" + sum / 900000.0 + "μs");long end = System.nanoTime();System.out.println("Total Time cost:" + (end - start)
/ 1000000+ "ms");}}public boolean writeFile() throws IOException {boolean condition = true;FileWriter fw = new FileWriter(file);long a = 0, start=0, end=0;//100 0000try {start = System.currentTimeMillis();for (int i = 0; i < 20000000; i++) {try {a = System.nanoTime();if(i<250000
db="" putvalue="" a="" new="" valueclass="" 0="" 1f="" 0="" 2f="" else="" if="" i="">=250000&i<500000 db="" putvalue="" a="" new="" valueclass="" 0="" 2f="" 0="" 4f="" else="" if="" i="">=500000 & i<750000 db="" putvalue="" a="" new="" valueclass="" 0="" 5f=""
0="" 9f="" else="" if="" i="">=750000 & i<19500000){db.putValue(a + "", new ValueClass(0.4f, 0.9f));}else{db.putValue(a + "", new ValueClass(0.3f, 0.9f));}fw.write(a + "\r\n");} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (DatabaseException
e) {e.printStackTrace();} finally {//fw.close();}}end = System.currentTimeMillis();System.out.println("Total time: " +(end-start)/1000 +"s");} catch (Exception e) {condition = false;e.printStackTrace();System.exit(1);}return condition;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: