如果线程类型很少,都写到一个文件里就很省事了,不用传递很多变量,直接用全局变量就成了。可是现在有很多类型线程,放在一起很乱,所以想把每个定义都单独拿出去。原来的全局变量,这样就只能用参数传递进去了。可是,,,我想在整个系统中设置一个boolean的变量,来控制系统的中止。但由于是基本类型,boolean的变量即使在线程刚创建时传给线程,我在系统运行中改变这个中止标志的值时,已经运行的线程肯定不能及时得到消息而做相应的动作,因为boolean是按值传递给线程的,外面的改变,线程没法知道。所以我好奇,这种情况下大家都是怎么做的,如果把线程定义文件单独出来的时候。实在没啥好办法,我就将这个中止标志定义成class,而不是基本的boolean类型了。这样线程创建时传进去的只是引用,线程执行时也将能及时获得最新的值了。这样如果很不好,那我就还老老实实把所有线程都放到一个java文件里好了。

解决方案 »

  1.   

    如果使用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();
      }
    }当然要真正深入实现要考虑很多,比如说可以实现多点通讯等等,可以参考许多的其它模式
      

  2.   

    监听者模式应该可以搞定。这是Java里面常用的事件处理机制。关于监听者模式和事件处理机制可以参考:http://blog.csdn.net/bluesmile979/archive/2008/12/01/3421339.aspx