java常用工具类详解_java常用的并发工具类有哪些?【面试题详解】

今天爱分享给大家带来java常用的并发工具类有哪些?【面试题详解】,希望能够帮助到大家。

Semaphore(信号量)-允许多个线程同时访问: synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,Semaphore(信号量)可以指定多个线程同时访问某个资源。

CountDownLatch(倒计时器): CountDownLatch是一个同步工具类,用来协调多个线程之间的同步。这个工具通常用来控制线程等待,它可以让某一个线程等待直到倒计时结束,再开始执行。

CyclicBarrier(循环栅栏): CyclicBarrier 和 CountDownLatch 非常类似,它也可以实现线程间的技术等待,但是它的功能比 CountDownLatch 更加复杂和强大。主要应用场景和 CountDownLatch 类似。CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是 CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await()方法告诉 CyclicBarrier 我已经到达了屏障,然后当前线程被阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过FTP工具类来操作FTP,以下是一个示例: ``` import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; public class FTPUtil { private static final String FTP_ADDRESS = "ftp服务器地址"; private static final int FTP_PORT = 21; private static final String FTP_USERNAME = "ftp用户名"; private static final String FTP_PASSWORD = "ftp密码"; // 连接到FTP服务器 public static FTPClient connectFTP() throws SocketException, IOException { FTPClient ftpClient = new FTPClient(); ftpClient.connect(FTP_ADDRESS, FTP_PORT); ftpClient.login(FTP_USERNAME, FTP_PASSWORD); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { ftpClient.disconnect(); throw new IOException("连接FTP服务器失败"); } return ftpClient; } // 上传文件到FTP服务器 public static void uploadFile(String remotePath, String fileName, InputStream input) throws IOException { FTPClient ftpClient = null; try { ftpClient = connectFTP(); ftpClient.changeWorkingDirectory(remotePath); // 切换到上传目录 ftpClient.storeFile(fileName, input); } finally { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } } // 从FTP服务器下载文件 public static void downloadFile(String remotePath, String fileName, OutputStream output) throws IOException { FTPClient ftpClient = null; try { ftpClient = connectFTP(); ftpClient.changeWorkingDirectory(remotePath); // 切换到下载目录 ftpClient.retrieveFile(fileName, output); } finally { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } } // 删除FTP服务器上的文件 public static boolean deleteFile(String remotePath, String fileName) throws IOException { FTPClient ftpClient = null; try { ftpClient = connectFTP(); ftpClient.changeWorkingDirectory(remotePath); // 切换到删除目录 return ftpClient.deleteFile(fileName); } finally { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } } } ``` 使用方式: 上传文件: ``` File file = new File("本地文件路径"); InputStream input = new FileInputStream(file); FTPUtil.uploadFile("上传目录", "上传的文件名", input); ``` 下载文件: ``` OutputStream output = new FileOutputStream(new File("本地文件路径")); FTPUtil.downloadFile("下载目录", "下载的文件名", output); ``` 删除文件: ``` FTPUtil.deleteFile("删除目录", "删除的文件名"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值