/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; import java.io.*; import java.util.*; public class Main { private static final String TEMP_FILE_NAME_PREFIX = "oflimit"; private static final String TEMP_FILE_NAME_SUFFIX = ".txt"; public static void main(String[] args) throws IOException { // Exhaust the number of open file descriptors. List files = new ArrayList(); List streams = new ArrayList(); try { for (int i = 0; ; i++) { File file = createTempFile(); files.add(file); streams.add(Files.newOutputStream(file.toPath(), CREATE, APPEND)); } } catch (Throwable e) { if (e.getMessage().contains("Too many open files")) { System.out.println("Message includes \"Too many open files\""); } else { System.out.println("Unexpected exception:"); e.printStackTrace(); } } // Now try to create a new thread. try { Thread thread = new Thread() { public void run() { System.out.println("thread run."); } }; thread.start(); thread.join(); } catch (Throwable e) { System.out.println(e.getMessage()); } for (int i = 0; i < streams.size(); i++) { streams.get(i).close(); } for (int i = 0; i < files.size(); i++) { files.get(i).delete(); } System.out.println("done."); } private static File createTempFile() throws Exception { try { return File.createTempFile(TEMP_FILE_NAME_PREFIX, TEMP_FILE_NAME_SUFFIX); } catch (IOException e) { System.setProperty("java.io.tmpdir", "/data/local/tmp"); try { return File.createTempFile(TEMP_FILE_NAME_PREFIX, TEMP_FILE_NAME_SUFFIX); } catch (IOException e2) { System.setProperty("java.io.tmpdir", "/sdcard"); return File.createTempFile(TEMP_FILE_NAME_PREFIX, TEMP_FILE_NAME_SUFFIX); } } } }