关于java多线程问题

concisedistinct 2012-03-03 09:17:12
关于java多线程问题
1、
在一个线程中等待一个队列返回结果值,是否可以在该线程中设置结果值并放入队列,从而使得等待的地方继续执行?

2、
是否可以给线程执行设置顺序?
3、

事件通知与队列、线程间如何交互?

谢谢。
...全文
94 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
Socket通讯的特点在于 通讯双方本来就是两个线程了,而且传统通讯模型下,是采用阻塞机制。NIO模型下,才变成了事件机制。而且也不是通知,只是负责网络通讯的线程把事件放入一个队列中,然后等待你所开发的程序所在线程去轮询它而已了。


线程执行顺序自行控制,可以使用wait/notify的方式来控制,但并不是唯一方式;令牌、优先级等模型也一样能实现这种控制。


通知机制本身就是一种模式。观察者模式也使用了通知机制。
concisedistinct 2012-03-03
  • 打赏
  • 举报
回复
socket通信使用BlockingQueue进行生产者和消费者同步,是否可以同时使用事件通知,而似乎事件通知是一个线程,而轮询Queue是两个线程,弄不清楚线程关系。。


请问线程执行顺序自行控制是使用wait()、notifyAll()来进行控制吗?

通知机制包括哪些方式啊?观察者模式是一种通知机制吗?

[Quote=引用 1 楼 ldh911 的回复:]
问题1,没咋看懂。

问题2,需要自行控制,没有现成机制。

问题3,线程跟队列似乎没有必然关系,事件通知倒是可以用于线程间的同步控制机制。


我有个关于BS架构下的聊天程序,就在线程间用了通知机制,可以看看。

http://blog.csdn.net/ldh911/article/details/7268879
[/Quote]
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
问题1,没咋看懂。

问题2,需要自行控制,没有现成机制。

问题3,线程跟队列似乎没有必然关系,事件通知倒是可以用于线程间的同步控制机制。


我有个关于BS架构下的聊天程序,就在线程间用了通知机制,可以看看。

http://blog.csdn.net/ldh911/article/details/7268879
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
嗯,挺好的,另一个做法就是:
◎ 分别用两条线程管理发送流和接收流;
◎ 接收流的线程只要收到消息,就扔进某List中;
◎ 发送的线程定期检查List,有内容就处理后往发送流写。

这种就是我说的:“接受这种并发,让它能够在并发的情况下仍然能正常执行”
concisedistinct 2012-03-03
  • 打赏
  • 举报
回复
两个系统间socket长连接通信,客户端与服务端建立连接后保持连接,服务端接收客户端请求后使用发送队列发送数据给客户端,接着等待客户端响应数据,使用接收队列接收客户端响应数据。服务端接收请求数据和接收响应数据会出现并发,这会儿使用变量事件,在发送数据到响应队列时,同时进行变量通知,从而保证系统第一回接收的数据是请求数据似乎可以了。。谢谢。
[Quote=引用 5 楼 ldh911 的回复:]
其实,如果你注意到的话,Java命名都叫做Stream,是流,其实并没有强调队列的概念。

你说的这种情况,有两种处理方式:
1、接受这种并发,让它能够在并发的情况下仍然能正常执行;
2、用wait/notify机制来控制。


但我觉得你可能把问题复杂化,或者说没有理解问题的本质,你能否说下你最原始的诉求是什么?就是最原始的向实现的效果?这样探讨起来可能更有目的性些。

光讨论……
[/Quote]
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
其实,如果你注意到的话,Java命名都叫做Stream,是流,其实并没有强调队列的概念。

你说的这种情况,有两种处理方式:
1、接受这种并发,让它能够在并发的情况下仍然能正常执行;
2、用wait/notify机制来控制。


但我觉得你可能把问题复杂化,或者说没有理解问题的本质,你能否说下你最原始的诉求是什么?就是最原始的向实现的效果?这样探讨起来可能更有目的性些。

光讨论概念不行,这就跟讨论招数似的。大家都学散打,散打都只有那么20招,为啥有人挨打有人打人?关键看面到实战的时候怎么见招拆招,怎么组合拳上去打。
concisedistinct 2012-03-03
  • 打赏
  • 举报
回复
谢谢。socket通信长连接,服务端有一个发送队列,一个接收队列, 使用两个线程接收socket数据一个接收请求数据一个接收响应数据,但是这两个线程会出现并发,有时请求数据会放到响应队列中了,设置优先级保证不了线程顺序。。

[Quote=引用 3 楼 ldh911 的回复:]
Socket通讯的特点在于 通讯双方本来就是两个线程了,而且传统通讯模型下,是采用阻塞机制。NIO模型下,才变成了事件机制。而且也不是通知,只是负责网络通讯的线程把事件放入一个队列中,然后等待你所开发的程序所在线程去轮询它而已了。


线程执行顺序自行控制,可以使用wait/notify的方式来控制,但并不是唯一方式;令牌、优先级等模型也一样能实现这种控制。


通知机制本身就是一种模……
[/Quote]

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧