纠结了好久了。
1.客户端发送查询聊天记录的请求,服务端就会产生一个线程A,通过这个线程服务端可以向客户端回馈信息。
由于聊天记录不需要时刻更新,所以这种A线程一产生就会在服务端那里阻塞(或挂起)。
2.这时候客户端又传来一个发送信息的请求,此时服务端也会产生一个线程B,通过这个线程来更新服务端保存的聊天记录。 
3.B执行结束后,聊天记录更新了,所以需要唤起A线程,反馈记录给客户端。网上查了半天,wait()和notify()怎么一用就报错...
谁能提供点可行的代码学习一下吗?

解决方案 »

  1.   

    这是一个web服务器,我代码结构有点杂,分成了很多小类,还是不发了。1中线程挂起了,如果不发送第二个请求怎么办?不返回了?
    是的,可以不返回。
    A、B两个线程可以说是没多大联系,只是A一直挂起,然后服务器处理完B请求后要唤起A。
      

  2.   

    你的A挂起是通过什么实现的,是wait()方法?如果是,那么肯定加了共享资源,你唤醒的时候,用共享资源notify下。
    synchronized (object) {

    }
      

  3.   

    代码样例可以参考下:
    http://blog.csdn.net/ldh911/article/details/7268879
      

  4.   

    我不知道怎么在B线程结束后唤醒A。我想,通过A.join()来实现也许比较好做?
    多线程这块一直没接触,菜啊。
      

  5.   


    应该是B在“结束前”唤醒A。A中:
    synchronized(某公用对象) {
        某公用对象.wait();
    }B中:
    public void run() {
        ....
        synchronized(某公用对象) {
             某公用对象.notifyAll();
        }
    }
    样例代码是给你参考发言者线程如何唤醒其它线程的过程。