java 多个线程操作同一文件夹上的文件 代码,遇到的有关问题及解决方案
java 多个线程操作同一文件夹下的文件 代码,遇到的问题及解决方案最近课程需要,写了一个抓取新浪微博数据
java 多个线程操作同一文件夹下的文件 代码,遇到的问题及解决方案
最近课程需要,写了一个抓取新浪微博数据存入文件中再将文件所在路径传给服务器的小程序,主要思想是,两个线程,一个用来从新浪微博不断抓取数据,实时地新建文件,写入文件,另一个线程则负责在这些文件所在的文件夹中实时地读取文件,得到文件名列表,将没传给服务器的文件名传给服务器。
?
代码如下(只贴一个演示原理的代码吧):
?
主程序
import?java.net.*; ??import?java.io.*; ?? ??public?class?Server?extends?Thread?{ ?? ????private?Socket?server; ?? ??????public?Server(Socket?c)?{ ?? ????????this.server?=?c; ?? ????} ????????public?void?run()?{ ?? ????????try?{ ?? ????????????BufferedReader?in?=?new?BufferedReader(new?InputStreamReader( ?? ????????????????????server.getInputStream())); ??????????????PrintWriter?out?=?new?PrintWriter(server.getOutputStream()); ?? ????????????while?(true)?{ ?? ????????????????String?str?=?in.readLine(); ??????????????????System.out.println(str); ??????????????????out.println("received?"+str); ?? ????????????????out.flush(); ??????????????????if?(str.equals("end")) ?? ????????????????????break; ?? ????????????} ??????????????server.close(); ??????????}?catch?(IOException?ex)?{ ?? ???????????????ex.printStackTrace(); ??????????} ??????} ????????public?static?void?main(String[]?args)?throws?IOException?{ ?? ????????ServerSocket?server?=?new?ServerSocket(9081); ?? ????????while?(true)?{ ?? ????????????Server?mu?=?new?Server(server.accept()); ?? ????????????mu.start(); ??????????} ??????} ??}??
运行程序时发现一个问题,写文件的线程正常运行,不断产生新文件,但是两个读文件的线程却像被‘卡住’了,不能增量读取新加入的文件名给服务器,开始时还在想难道是多线程共同操作一个文件夹也需要什么锁吗,后来发现不是!注意client中while的后半部分(被注释掉的几行),这里client等待server反馈并输出从server中读取的内容,但是如果server返回的内容中不包含/n则readline会堵塞在这里 不进入下一个循环,因此造成“卡住”的情况,所以两端之间的通信内容要注意格式(这里如果client一定要输出服务器的反馈,那么可以对服务器返回的内容做一些处理,比如如果客户端送过来的内容是null的,也返回一个带/n的串)。
?
顺带着了解了java的HashSet和ArrayList和Array的比较,见这位博主的链接:http://www.diybl.com/course/3_program/java/javajs/20071111/85300.html
?
谢谢zz指点~加油~
?
?
?