解决方案 »
- 多线程的两个程序有什么不同。。。
- 请问:Map中存放若干整数对象,现要求将其排序后放入List对象中,谢谢!
- java中 main() 函数中的string数组
- java聊天软件
- 正则表达式的问题
- 谁能去除Frame窗体的最大化\最小化\关闭按钮
- 装了tomcat后http://localhost:8080/该页无法显示!
- 请教一个对象内存释放的问题:一个数据集对象rowset在使用完后,使用rowset.close()方法还是使用rowset.close();rowset=null;方法?这两
- 关于对象在内存中的实现和序列化问题 高分送高手
- java 的简单问题 6 ???
- 匿名内部类
- 一个简单例子:关于java线程对象的销毁问题, 非常困惑!
不是的,如果存到缓冲区,那么debug和正常运行整个流程执行完毕也不会有差别吧? 我遇到的是DEBUG和正常运行不一样。
可以帮忙看看吗? 我都试过,就是正常运行和debug出来的效果不一样。很奇怪,按正常逻辑没有区别。但是却有区别了。
这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
每要传输一堆数据,立即调用一下流的 flush(). DEBUG时,会flush的。
这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
代码可以看看吗?
这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
这个我知道,我的问题是正常执行程序和debug得到不同的显示效果。 很奇怪,按道理应该是一样的。因为都是一次程序执行。
代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
每要传输一堆数据,立即调用一下流的 flush(). DEBUG时,会flush的。 我没有用到缓冲流的。 不要的吧?
代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
#zxd6587#@#163.#com
#去掉
代码可以看看吗?可以。可以留个邮箱吗? 我把全部发给你。谢谢了~
#zxd6587#@#163.#com
#去掉
发了。先谢谢。
发了。先谢谢,代码没写完。就是遇到问题就没写下去了
问题出在这里!
当你启动服务端的时候就一直在遍历存入socket的list集合!如果一个线程在遍历的时候
你另一个线程修改集合内容就会抛出java.util.ConcurrentModificationException 异常!就是不允许加入!
当上一个线程还在遍历的时候你这个线程往集合中加入内容 上图中的代码就会抛异常!Exception in thread "Thread-3" java.util.ConcurrentModificationException ReceviedThread(也就是Thread-3)就停止运行了!所以你客户端发送的信息已经没有线程接收!所以在看不到任何输出,就以为没有收到!此时也就不存在遍历list情况!再连接其他客户端也就不会再抛异常!
当你使用debug模式时!ReceviedThread会停在你打断点的地方没有一直遍历list集合!所以客户端连接进来时操作list集合(第二张图)不会抛异常!所以能够正常显示输出内容!
楼主明白了吗?
自己使用synchronized比较麻烦!因为有一个线程一直在遍历list容器,所以会一直持有这个对象锁!对list插入的那个线程一直无法获取到对象锁就一直等待!
我记得Collections有个一静态方法Collections.synchronizedList(List<> list);可以返回一个同步控制的List!你可以试试!你那样读客户端发来的信息还有一个问题!当你获取到一个客户端的输入流使用in.read(buffer);读进buffer数组!read方法是个阻塞方法!也就是说程序会停在这里等着客户端发信息!其他客户端发的信息时无法显示的!因为程序等另一个客户端发信息!还没有遍历到发信息的这个客户端的socket!楼主明白我说 的意思吗??一般是一个客户端连进来服务器就开一个线程!而不是像这样一个线程服务所有客户端发来信息!
自己使用synchronized比较麻烦!因为有一个线程一直在遍历list容器,所以会一直持有这个对象锁!对list插入的那个线程一直无法获取到对象锁就一直等待!
我记得Collections有个一静态方法Collections.synchronizedList(List<> list);可以返回一个同步控制的List!你可以试试!你那样读客户端发来的信息还有一个问题!当你获取到一个客户端的输入流使用in.read(buffer);读进buffer数组!read方法是个阻塞方法!也就是说程序会停在这里等着客户端发信息!其他客户端发的信息时无法显示的!因为程序等另一个客户端发信息!还没有遍历到发信息的这个客户端的socket!楼主明白我说 的意思吗??一般是一个客户端连进来服务器就开一个线程!而不是像这样一个线程服务所有客户端发来信息!
谢谢。之前的同步问题我通过锁List对象也能成功了,通过对象的wait()和notify()可以解决、。但你说的第二个问题,就是read()读数组,确实是个问题。我也在想办法解决。请问有什么好的方法吗?如果不改思路的情况下。 多谢你的帮助,学到了很多东西。
自己使用synchronized比较麻烦!因为有一个线程一直在遍历list容器,所以会一直持有这个对象锁!对list插入的那个线程一直无法获取到对象锁就一直等待!
我记得Collections有个一静态方法Collections.synchronizedList(List<> list);可以返回一个同步控制的List!你可以试试!你那样读客户端发来的信息还有一个问题!当你获取到一个客户端的输入流使用in.read(buffer);读进buffer数组!read方法是个阻塞方法!也就是说程序会停在这里等着客户端发信息!其他客户端发的信息时无法显示的!因为程序等另一个客户端发信息!还没有遍历到发信息的这个客户端的socket!楼主明白我说 的意思吗??一般是一个客户端连进来服务器就开一个线程!而不是像这样一个线程服务所有客户端发来信息!
谢谢。之前的同步问题我通过锁List对象也能成功了,通过对象的wait()和notify()可以解决、。但你说的第二个问题,就是read()读数组,确实是个问题。我也在想办法解决。请问有什么好的方法吗?如果不改思路的情况下。 多谢你的帮助,学到了很多东西。不改变思路的话用这种阻塞式方法肯定不合适!可以尝试使用 nio 非阻塞!不过我也不是很熟!
不过我建议还是一个客户端开一个子线程服务!
真实应用每连接进来一个客户端起一个子线程也不合理!太耗费资源!应该也是实用nio解决的!楼主好好研究一下nio吧!请猛点此链:http://shixm.iteye.com/blog/1792015
真实应用每连接进来一个客户端起一个子线程也不合理!太耗费资源!应该也是实用nio解决的!楼主好好研究一下nio吧!请猛点此链:http://shixm.iteye.com/blog/1792015太感谢你了。我研究后试试能不能不改思路的情况下做出来