有两个线程A、B,A的作用是监听TCP请求,B是发送UDP数据包,A跟B通过一个状态state进行连接,比如A设置state为停止,B线程就关闭UDPSocket。这样一个state要怎么来做??而且我两个线程是在main中启动的--苦思很久都没有好方法。希望有人给说说!

解决方案 »

  1.   

    将B传给A
    A需要停止的时候调用B的一个方法,如close
      

  2.   

    说的太乱,两个线程怎么了,你安排一个公共的变量不就可以了吗?或者用factory来创建里面保留一些公用的变量!
      

  3.   

    我的线程是在main中启动的!无法在A中调用B的close,而且停止只是多个状态中的一个,还有其它的状态也用state进行传递,我还是想知道怎样通过state连接两个线程
      

  4.   

    wmzsl(王明哲) 能说得明白些吗?我不懂你意思哎~公共变量怎么设?别告诉我用static
      

  5.   

    建立第三个线程:每隔一定的时间(比如3ms),监听state
      

  6.   

    AB两个线程必须要有个管理者,不然很乱
    可以考虑Context,自己写一个context类作为两个线程的变量
    其实很多方法的
    但我觉得你的问题在于事件通知而不是状态传递,考虑一下PropertyListener吧
      

  7.   

    写了一个同步的例子,但是有些问题,还请帮我看看
    import   java.util.Vector;
    public   class   TestSynchronized   {   
    public   static   void   main(String[]   args)   {   
    Vector<Integer>   goods   =   new   Vector<Integer>();
    goods.add(-1);
    Consume[] c = new   Consume[5];
    Produce[] p = new   Produce[5];
    for(int  i = 0; i <5;i++){
    c[i] = new Consume(goods,i);
    p[i] = new Produce(goods,i);
    }
    for(int i = 0;i<5;i++){
    c[i].run();//运行完就不动了
    p[i].run();//这个地方怎么不运行了?
    }
    }   
    }   class   Consume   implements   Runnable   {   
    private   Vector<Integer>   goods;   
    private int i ;
    public   Consume(Vector<Integer> goods,int i)   {   
    this.goods   =   goods;
    this.i = i;
    }
    public   void   run()   {
    synchronized(goods)   {   
    while   (true)   {   
    try   {   
    if   (goods.size()   ==   0)   
    goods.wait();   
    System.out.println("Consumer "+i+" :   goods   have   been   taken");
    System.out.println("Consumer "+i+" :   goods is : "+goods.get(0)); 
    goods.clear(); 
     
    goods.notify();   
    }   
    catch   (InterruptedException   e)   {   
    e.printStackTrace();   
    }   
    }   


    }   
    } 日志有问题:
    Consumer 0 :   goods   have   been   taken
    Consumer 0 :   goods is : -1
    就只有这么多?为什么  class   Produce   implements   Runnable   {   
    private   Vector<Integer>   goods;   
    private int j;
    public   Produce(Vector<Integer>   goods,int j)   {   
    this.goods   =   goods;
    this.j = j;

    public   void   run()   {
    int i = 0;
    synchronized(goods)   {
    if(goods.size()!= 0){
    Integer f = goods.get(0);
    System.out.println("f = "+f);
    }
    System.out.println("product start....... "+j);
    while   (true)   {   
    try   {   
    if   (goods.size()   !=   0)
    goods.wait();
    goods.add(new  Integer(i));   
    i++;
    goods.notify();   
    System.out.println("Producer"+j+ " :   goods   are   ready");   

    Thread.sleep(500);   
    }   
    catch   (InterruptedException   e)   {
    e.printStackTrace();   
    }   
    }   
    }
    }   
    }
      

  8.   

    上面的写乱了~重发:
    写了一个同步的例子,但是有些问题,还请帮我看看
    import   java.util.Vector;
    public   class   TestSynchronized   {   
    public   static   void   main(String[]   args)   {   
    Vector<Integer>   goods   =   new   Vector<Integer>();
    goods.add(-1);
    Consume[] c = new   Consume[5];
    Produce[] p = new   Produce[5];
    for(int  i = 0; i <5;i++){
    c[i] = new Consume(goods,i);
    p[i] = new Produce(goods,i);
    }
    for(int i = 0;i<5;i++){
    c[i].run();//运行完就不动了
    p[i].run();//这个地方怎么不运行了?
    }
    }   
    }   class   Consume   implements   Runnable   {   
    private   Vector<Integer>   goods;   
    private int i ;
    public   Consume(Vector<Integer> goods,int i)   {   
    this.goods   =   goods;
    this.i = i;
    }
    public   void   run()   {
    synchronized(goods)   {   
    while   (true)   {   
    try   {   
    if   (goods.size()   ==   0)   
    goods.wait();   
    System.out.println("Consumer "+i+" :   goods   have   been   taken");
    System.out.println("Consumer "+i+" :   goods is : "+goods.get(0)); 
    goods.clear(); 
     
    goods.notify();   
    }   
    catch   (InterruptedException   e)   {   
    e.printStackTrace();   
    }   
    }   


    }   
    } 日志有问题:
    Consumer 0 :   goods   have   been   taken
    Consumer 0 :   goods is : -1
    就只有这么多?这是怎么回事?