这个 java 阻塞队列变体可能吗?

is this java blocking queue variant possible?

下面的场景是我想到的:
- 2 个线程,1 个生产者,1 个消费者
- T1 创建队列并启动下一个线程,并负责将元素放入队列

ServerThread implements Runnable{

    run(){
        BlockingQueue q = new ArrayBlockingQueue(1024);
        ListenerThread lt = new ListenerThread8(q);
        lt.start();

        ....

        q.put(message);

    }
}

-T2 将等待队列中的元素并处理它们

ListenerThread implements Runnable{
        ...
        run(){
            while(run){
               if(!q.isEmpty){
                    sendMessage(q.getfirst());
               }else{
                    sleep(1000);
               }
            }
        }
   }

这只是我想如何实现我的程序部分的伪实现。
-这行得通吗?
- 这可以与队列上的静态修饰符一起使用吗?

这是生产者-消费者的自然模式,所以是的,这会起作用。

顺便说一句 - 你不需要检查队列看它是否为空 - 你只需要调用 take 它会等到有东西出现。

class Thing {
}

class ServerThread implements Runnable {

    @Override
    public void run() {
        BlockingQueue<Thing> q = new ArrayBlockingQueue<>(1024);
        ListenerThread lt = new ListenerThread(q);
        new Thread(lt).start();

        q.put(message);

    }
}

class ListenerThread implements Runnable {

    volatile boolean run;
    private final BlockingQueue<Thing> q;

    public ListenerThread (BlockingQueue<Thing> q) {
        this.q = q;
    }

    @Override
    public void run() {
        while (run) {
            try {
                sendMessage(q.take());
            } catch (InterruptedException ex) {
                run = false;
            }
        }
    }
}

您应该不需要排队 static

我建议的唯一调整是不要在服务器 run 方法中创建侦听器。服务器应该尽可能少地了解消费者。队列、服务器和消费者都应该在其他地方创建和链接。