使用两个线程,一个负责接收(A),一个负责处理入库(B>,假设队列名为L,A接收到数据后,在队列中插入数据后,使用L.notifyAll().
B线程:
while(L.empty())
{
l.wait();
}
处理数据,入库.
.....
大概意思如此.

解决方案 »

  1.   

    请问L.notifyAll().的作用是什么?
      

  2.   

    L.notifyAll().唤醒wait的线程们开始争夺cpu,争到的就可以继续执行wait后面的语句了,争不到的重新回到wait状态。学过多线程就应该知道的命令吧?
      

  3.   

    用类似p/v操作
    deposit(data){
      p(avail)
      送数据入缓冲区
      v(full)
    }
    remove(data){
      p(full)
      取缓冲区中数据进行处理
      v(avail)
    }
    信号量avail表示有界缓冲区的空单元数,初值为单元个数
    信号量full表示有界缓冲区中非空单元数,初值为0。  
    p操作代表是信号量减1,如果信号量<=0代表资源不可用
    v操作代表信号量加1
      

  4.   

    首先有一个公共数据存取地Data,并提供存取方法(要控制数据量比如+1,-1等)。你可以用一个static对象来实现。两个线程,一个负责接收T1,一个负责读取(当然读取的同时可以处理入库)T2T1只管向Data中放数据。
    T2只管从Data中取数据。
      

  5.   

    看了楼上两位的回帖,还是很糊涂,至于公共数据存取地,我是用了一个队列Queue,队列有
    Queue.enter()和Queue.out()这两个方法,数据先进先出,至于送数据入缓存是很容易的,因为我的socket是客户端驱动,就是说只要有数据进来,我就把他送到Queue中去,但是,数据处理入库的操作我该怎么来驱动呢?而且,该怎么让他自动去读取Queue中的数据呢?最好能写出简单的代码来讨论,谢谢各位。
      

  6.   

    你让消息队列主动分发已经得到的消息不就行了?把数据库插入操作注册成该队列的事件响应,Socket数据的入队列作为事件不就可以了?
      

  7.   

    检查队列是否是空的就可以了
    我上面方法的话就是检查full变量
      

  8.   

    我认为不应用Socket数据的入队列作为事件,应为插入和读取是不同步的,也没有同步的必要,你可以根据你的需求对线程设定一个运行的间隔时间,或者是设定线程的优先级(但是要注意的是:应根据公共数据存取地中的数量多少适时的改变)。
      

  9.   

    我要实现队列缓存的目的就是为了适应不同步的特性,如果简单的同步的话,就没必要这么复杂,只要在一个线程中完成就OK了,可能用两个同级别的线程是比较可行的一种方法,一个线程A用来向队列中插入数据,另一个线程B用来从队列中取数,A插入数据完毕之后直接把队列传给处理数据的class,然后唤醒wait中的队列,不知道这个思路是否有问题?
      

  10.   

    我以前做了类似的程序,要参考吱一声.
    [email protected]
      

  11.   

    我还是坚持用p/v操作
    这样两个进程依据full,avail两个信号两,这样就不会出现队列满了,还
    进行插入,队列空了还要求提出信息。
    至于“从队中取”进程,用time每隔一个固定时间查一次就行了