首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

多线程写资料 不知道对不对 不对的请大家指出

2012-08-22 
多线程写文件不知道对不对不对的请大家指出package cn.xmu.mutliThreadimport java.io.*import java.uti

多线程写文件 不知道对不对 不对的请大家指出

package cn.xmu.mutliThread;import java.io.*;import java.util.*;/** * Note:Only be able to run a task per time for used static Map * @author KeXie(Ke_Xie@163.com) * */public class MakeIntermediateResultByMutilThread {private final static String NolimateDate = "2010-01-01 00:00:00";static Set<String> User = new HashSet<String>();static Set<String> Item = new HashSet<String>();static Map<String,String> RatingMap = new HashMap<String,String>();static Map<String,String> UserNeighbor = new HashMap<String, String>();static BufferedWriter bw = null;public static void Make(String graphFile,String ratingFile) throws IOException{bw = new BufferedWriter(new FileWriter("part_Thread"));BufferedReader br = null;br = new BufferedReader(new FileReader(graphFile));String line = null;String[] ss = null;StringBuffer sb = null;while((line = br.readLine())!=null){ss = line.trim().split("\t");if(!UserNeighbor.containsKey(ss[1])){UserNeighbor.put(ss[1],ss[0]);}else{sb = new StringBuffer();sb.append(UserNeighbor.get(ss[1])).append("\t").append(ss[0]);UserNeighbor.put(ss[1], sb.toString().trim());}}br.close();System.out.println("UserNeighbor:"+UserNeighbor.size());br = new BufferedReader(new FileReader(ratingFile));while((line = br.readLine())!=null){ss = line.trim().split("\t");User.add(ss[0]);Item.add(ss[2]);RatingMap.put(ss[0]+"\t"+ss[2], ss[1]);}br.close();//System.out.println("User:"+User.size());//System.out.println("Item:"+Item.size());//System.out.println("RatingMap:"+RatingMap.size());}static class UserMakeCoreThread implements Runnable{private String user;public UserMakeCoreThread(String user) {this.user = user;}@Overridepublic void run() {System.err.println(user+"\tbegin");String[] tt = null;String item = null;if(UserNeighbor.containsKey(user)){tt = UserNeighbor.get(user).trim().split("\t");}Iterator<String> IItr = Item.iterator();while(IItr.hasNext()){item = IItr.next();for(int i=0;i<tt.length;i++){synchronized (bw) {if(RatingMap.containsKey(user+"\t"+item)&&RatingMap.containsKey(tt[i]+"\t"+item)){try {bw.write(user+"\t"+item+"\t"+RatingMap.get(user+"\t"+item)+"\t"+RatingMap.get(tt[i]+"\t"+item));bw.newLine();bw.flush();} catch (IOException e) {e.printStackTrace();}}else if(!RatingMap.containsKey(user+"\t"+item)&&RatingMap.containsKey(tt[i]+"\t"+item)){try {bw.write(user+"\t"+item+"\t"+NolimateDate+"\t"+1);bw.newLine();bw.flush();} catch (IOException e) {e.printStackTrace();}}}}}System.err.println(user+"\tend");}}public static void main(String[] args) throws IOException {Make("graph.txt","UserItemAccessTime.txt");Iterator<String> itr = User.iterator();String user  = null;while(itr.hasNext()){user = itr.next().trim();new Thread(new UserMakeCoreThread(user)).start();}}}
?

热点排行