zhwh19790
2007-04-18 10:15
唤醒线程后就取A当前实例里的变量c。

Coolyu0916
2007-04-18 10:23
晕了,我知道你的意思

我们一点点来吧

一个B生成了A,这时候有了一个A,也有了A的变量C对吧,然后A生成了线程D,D对A中的C进行访问是不是,这个过程是不是没有问题??只要D不消失,A就不能消失,这个是可以保证的。

现在又有一个B称为B1吧,那么它产生了一个A1(Class A)对吧,有个变量C1,,然后A1生成了现成D1,现在你希望D1对谁进行访问那??如果是A.c那么就用Singleton模式,如果是A1.C1那么就没有问题。

zhwh19790
2007-04-18 10:44

一个B生成了A,这时候有了一个A,也有了A的变量C对吧,然后A生成了线程D,D对A中的C进行访问是不是,这个过程是不是没有问题??只要D不消失,A就不能消失,这个是可以保证的。----------------然后A生成了线程D,D当时不访问c,下次再生成A的时候,D被唤醒,再访问那个时候的A的c。

[该贴被zhwh19790于2007年04月18日 10:45修改过]

Coolyu0916
2007-04-18 10:49
A用Singleton模式

zhwh19790
2007-04-18 12:05
其实B也是线程,如果使用Singleton模式,估计A的数据被打乱了。

Coolyu0916
2007-04-18 14:34
看样子你的程序设计有点问题

如果不涉及保密什么的,你最好把需求说清楚下,让大家帮你分析一下。

zhwh19790
2007-04-18 14:50
我是模拟web程序,

用socket监听,一有连接马上启动线程B(对应各个客户端),B里做判断,如果满足一定条件1,则调用a.createThread()启动线程D,D无限循环,等待条件触发。

还是socket监听,一有连接马上启动线程B,B里做判断,如果满足一定条件2,则调用a.notifyThread(),唤醒等待的线程D,D取B里面传来的数据,即A a = new A(c1),D里面判断条件决定是否触发。

Coolyu0916
2007-04-18 15:18
说一点我的看法

主线程是一个accept,所有的线程管理都应该是他来进行管理。不要在线程之中启动线程,这样责任不明确。对于数据要有同意的manager,这样通过manager进行访问也有利于你程序的扩展跟复用。

zhwh19790
2007-04-18 16:46
要是能实现唤醒线程同时传数据给线程就好了。

banq
2007-04-18 16:51
>要是能实现唤醒线程同时传数据给线程就好了

线程编程最大缺点就是无法随心所欲地对线程进行控制,这和不用C做复杂系统道理一样.所以我们才使用J2EE/JavaEE技术.

Coolyu0916
2007-04-18 16:54
>>要是能实现唤醒线程同时传数据给线程就好了。

为什么要传递数据那??让线程访问本身数据就好了。就像我写的那个D一样,让D访问A。

zhouxu
2007-04-18 17:40
线程与对象是两个概念,讨论的时候必须分清楚对象在某一时刻在哪个线程中运行。

如果我理解不错的话,你的意思是不是:A与D是一对一的,同时有多个(A,D)并发线程,B不停地接受客户端的命令,转给任意一个线程(A,D)处理。

这像是一个线程池模型,问题是B不能老是动态创建A,而应每次到池中挑出一个A,A持有线程D,对象D创建的时候传入A,这样就可以在D中读取A中的C,也就是由B转来的命令。

zhwh19790
2007-04-18 18:11
to zhouxu :你能否用简单的代码描述一下你的想法?

zhouxu
2007-04-18 18:41
对不起,现在我还不太会写Java代码。不过我可以说说我的意思。

上述讨论不清在于混淆了对象和线程,先参考我的定义:线程是对象的容器,每个线程都有一个句柄对象供外界用户控制。

>用socket监听,一有连接马上启动线程B(对应各个客户端)。。。

B是调度线程,它可以通过对象A创建新的工作线程D,也可以通过对象A唤醒挂起的工作线程D处理命令。

因此A是线程D的句柄,A处于线程B这个容器中,B对象应该有一个聚集管理多个A,当没有空闲的A(即A所代表的工作线程D)时,才创建新的(A,D)线程,否则唤醒...

A与D双向关联,B通过A向D传输命令,B与D互斥访问A。

如果A的逻辑过于简单的话,建议去掉A,这时对象D就是线程D的句柄,仍由对象B管理。

Coolyu0916
2007-04-19 09:07
你能说说线程D做什么的么??

猜你喜欢
2Go 上一页 1 2