在 java 回调中发送多个文件?

Sending multiple files in java callback?

如何添加到发送队列,例如我用JFileChooser选择一个文件,然后在一个新的线程中将它发送给客户端,我想选择另一个并发送它。发生的情况是它同时发送文件并且客户端的输出被破坏。

我希望能够添加到某种 "queue",以便在发送第一个文件时,服务器将开始发送下一个文件。

服务器-> 客户端之间 socket communication 的一个好方法是每个客户端有 1 个线程,并让该线程从 java.util.concurrent.BlockingQueue 读取数据。这样的接口非常适合(就像所有 java.util.concurrent 对象一样)用于管理多线程并发。

这个想法是,服务器有一个像这样的 ClientThread

class BroadCastThread extends Thread{
    LinkedBlockingQueue<SendFileTask> bcQueue = new LinkedBlockingQueue<>();
    @Override
    public void run() {
        while( true ){
            try {
                SendFileTask task = bcQueue.take();
                task.sendFile();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    void addTask(SendFileTask rt) throws InterruptedException{
        bcQueue.put(rt);
    }
}
interface SendFileTask{
    void sendFile() throws Exception;
}

并通过 adding tasks 将其用于线程对象:

        BroadCastThread bct = new BroadCastThread();
        bct.start();

        //With lambda
        bct.addTask(() -> {
            //Send file code
        });

        //Without lambda
        bct.addTask(new SendFileTask() {
            @Override
            void sendFile() throws Exception {
            //Send file code
            }
        });

您甚至可以将 Socket 信息与线程一起存储,并将其传递给任务接口,如果您希望 sendFile 方法将其作为参数接收。