日期:2014-05-20  浏览次数:20674 次

如果多个线程,大家都是每个线程一个单独的文件么?
如果线程类型很少,都写到一个文件里就很省事了,不用传递很多变量,直接用全局变量就成了。

可是现在有很多类型线程,放在一起很乱,所以想把每个定义都单独拿出去。原来的全局变量,这样就只能用参数传递进去了。

可是,,,我想在整个系统中设置一个boolean的变量,来控制系统的中止。但由于是基本类型,boolean的变量即使在线程刚创建时传给线程,我在系统运行中改变这个中止标志的值时,已经运行的线程肯定不能及时得到消息而做相应的动作,因为boolean是按值传递给线程的,外面的改变,线程没法知道。所以我好奇,这种情况下大家都是怎么做的,如果把线程定义文件单独出来的时候。

实在没啥好办法,我就将这个中止标志定义成class,而不是基本的boolean类型了。这样线程创建时传进去的只是引用,线程执行时也将能及时获得最新的值了。

这样如果很不好,那我就还老老实实把所有线程都放到一个java文件里好了。

------解决方案--------------------
可以用静态成员嘛,用静态成员就不需要传参数给线程了,线程也可以随时获取静态成员的值。


------解决方案--------------------
如果使用boolean变量,可以采用类似消息或者监听器的机制,在两个线程之间通讯!
如经常有这样的情况:线程A改变boolean变量,线程B检查改变并做出相应的变化,这时需要线程间的通讯。
简单实现的话,线程A要负责通知线程B,线程B要时刻监听来自A的通知
class B
{
private static boolean flag=false;
public void setFlag()
{
flag=true;
}
......
线程B内的一个监控函数
private void monitor()
{
....
while(true)
{
if(flag)
......
sleep(3000);
}
}
}
class A
{
//改变发生时,通知B
private void sendInfo()
{
...
B.setFlag();
}
}

当然要真正深入实现要考虑很多,比如说可以实现多点通讯等等,可以参考许多的其它模式
------解决方案--------------------
监听者模式应该可以搞定。这是Java里面常用的事件处理机制。

关于监听者模式和事件处理机制可以参考:

http://blog.csdn.net/bluesmile979/archive/2008/12/01/3421339.aspx