我这个线程起的有没有问题

问题描述

//得到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()方法 怎么能运行?

时间: 2024-09-13 12:20:51

我这个线程起的有没有问题的相关文章

线程池的使用(第八章)

线程池的使用 Executor框架可以将任务的提交与任务的执行策略解耦开来. 并非所有的任务都使用所有的执行策略,有些任务需要明确的指定执行策略,包括: 1. 依赖性任务:提交给线程池的任务需要依赖其他的任务,那么就隐含地给执行策略带来了约束,此时必须小心地维持这些执行策略以避免产生活跃性问题 2. 使用线程封闭机制的任务:单线程的Executor能够对并发性做出更强的承诺,对象可以封闭在任务线程中,使得在该线程中执行的任务在访问该对象时不需要同步,即使这些资源不是线程安全的也没有问题.但这种情

搜罗Android开发eclipse错误汇总

大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement! [2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2)原因: 不影响正常运行.在AndroidManifest.

我的Android进阶之旅------>Android开发错误汇总

大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement! [2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2) 原因: 不影响正常运行.在AndroidManifest

Android开发错误总结

1)错误信息: [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement! [2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2) 原因: 不影响正常运行.在AndroidManifest.xml文件中没有加API的版本号,在<manifest> </manifest&g

直接操作形参和下面这种操作有区别吗?

问题描述 public void changPwd(User user){ User u=user; u.setName("zs");}和public void changPwd(User user){ user.setName("zs");}有区别吗?尤其是在多线程的时候 问题补充:lanrenjun 写道 解决方案 从效果上讲 应该是没有区别因为定义的User u=user; 相当于变量u对 user的引用 所以u.setName("zs")

jQuery同步Ajax带来的UI线程阻塞问题及解决办法

遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的: function getData1(){         var result;         $.ajax({             url : "p.php",             async : false,  

详解.NET编程过程中的线程冲突

看起来,将其lock起来后,就万事大吉了,没有人能修改这个容器,但实际上这个容器不过是用一个ArrayList实例来实现的,如果某段代码绕过这个容器而直接操作_list的话,则对这个容器对象lock也不可能保证容器不被修改了. 一.什么是线程冲突 线程冲突其实就是指,两个或以上的线程同时对同一个共享资源进行操作而造成的问题. 一个比较经典的例子是,用一个全局变量做计数器,然后开N个线程去完成某个任务,每个线程完成一次任务就将计数器加一,直到完成100次任务.如果不考虑线程冲突问题,用类似下面的代

java 线程安全

安全 四种方式 sychronized关键字sychronized method(){} sychronized (objectReference) {/*block*/} static synchronized method(){} sychronized(classname.class)其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁要注意的是sychronized method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronize

C# 线程无法开启窗口的原因

在 C# 里面, 主窗口拥有主线程, 主线程产生子线程监控 Socket 埠, 子线程一收到数据流就会给主线程发送一个事件, 创建一个窗口. 现在的情况是子线程能够收到数据流, 主窗口能够收到子线程发送过来的事件, 能够创建一个窗口. 这个窗口有问题: 窗口状态像死掉程序的窗口一样, 反白的.开发碰到很棘手的问题, 寻找解决方法. 品味程序出错过程, 逐步跟踪程序执行过程, 每一行代码每一条语句全部执行, 怪了, 大白天碰到鬼了. 主窗口加入一个按钮, 按钮的作用就是执行主窗口的事件, 启动程序