问题描述
//得到socket及其它信息private static SessionBean sessionBean = SessionBean.getInstance();/** * 报文处理及生成CSV文件流程 * @return void 无返回值 */public static void process(){//从上层sessionBean中得到一个socket,socket负责接收实时消息Socket s = sessionBean.getSocket();new Runnable() {public void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String data = br.readLine();//得到所需要的数据String needData = getNeedMessage(data);//处理所需要的数据dataHandle(needData);//生成CSV文件writeCsvFile();} catch (IOException e) {logger.error("报文信息读取失败");}}};} 问题补充:用时就new 本类().process
解决方案
不太清楚你的业务场景,就只能从代码上面说了1.你并没有new Thread,只是构造了一个Runnable的实例,等于你的这个Runnable并没有被执行2.对于socket,你只是获取操作了,并没有关闭,这里也是一个隐患,关闭的时候最好是finally中关闭3.getSocket这个方法并没有看到具体的代码,是否需要同步4.process这个方法本身就是static的,为什么你还要new呢
解决方案二:
这个应该new Thread(new Runnable(){...run(){...}}).start()
解决方案三:
内部类中 你可能会丢掉对s 的引用
解决方案四:
有两个问题1. process()是static的 还需要new 本类().process吗?2. 你所谓的线程都没调用start()方法 怎么能运行?