线程完成后,如何通知主线程?

Cai*_*der 6 java multithreading

我使用FTP原始命令将文件上传到FTP服务器,我启动一个新线程通过我的代码中的套接字发送文件.当新启动的线程完成发送文件时我想向控制台输出一些消息,我怎样才能确保线程完成它的工作?这是我的代码:

TinyFTPClient ftp = new TinyFTPClient(host, port, user, pswd);
ftp.execute("TYPE A");
String pasvReturn = ftp.execute("PASV");
String pasvHost = TinyFTPClient.parseAddress(pasvReturn);
int pasvPort = TinyFTPClient.parsePort(pasvReturn);
new Thread(new FTPFileSender(pasvHost, pasvPort, fileToSend)).start();
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 9

我怎样才能确保线程完成它的工作?

你这样打电话Thread.join():

...
Thread t = new Thread(new FTPFileSender(pasvHost, pasvPort, fileToSend));
t.start();

// wait for t to finish
t.join();
Run Code Online (Sandbox Code Playgroud)

但是请注意,在其他线程完成之前Thread.join阻塞.

更好的想法可能是将上传线程封装在一个UploadThread类中,该类在完成时执行一些回调.例如,它可以addUploadListener在上传完成时实现并通知所有这样的侦听器.然后主线程将执行以下操作:

UploadThread ut = new UploadThread(...);
ut.addUploadListener(new UploadListener() {
    public void uploadComplete() {
        System.out.println("Upload completed.");
    }
});

ut.start();
Run Code Online (Sandbox Code Playgroud)