我知道,如果资源实现了AutoCloseable,那么您通过try传递的资源将自动关闭.到现在为止还挺好.但是当我有几个我希望自动关闭的资源时,该怎么办?套接字示例;
try (Socket socket = new Socket()) {
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
}
Run Code Online (Sandbox Code Playgroud)
所以我知道套接字将被正确关闭,因为它在try中作为参数传递,但输入和输出应如何正确关闭?
java sockets datainputstream try-with-resources autocloseable
我创建了一个小型电影租赁模拟程序.以下是它的工作原理: - 主线程允许用户输入客户名称
所以这似乎工作得很好; 它适用于添加的前5个客户.在5号之后添加的客户似乎卡在semaphore.aquire()等待,我无法理解为什么,所以我在这里问.所有的帮助将非常赞赏:)
App.java:
import java.lang.System;import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class App {
public static CountDownLatch latch = new CountDownLatch(5);
public static Executor executor = Executors.newCachedThreadPool();
public static Store store = new Store();
public static Semaphore semaphore = new Semaphore(Store.getMovies().size());
Scanner in;
public App() {
in = new Scanner(System.in);
while (true) {
executor.execute(new Customer(in.nextLine()));
}
}
public static void main(String[] args) {
new App(); …Run Code Online (Sandbox Code Playgroud)