Path: blob/master/test/jdk/java/nio/channels/Selector/SelectAndClose.java
41153 views
/*1* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/* @test24* @bug 5004077 820376525* @build SelectorUtils26* @run main SelectAndClose27* @summary Check blocking of select and close28*/2930import java.io.IOException;31import java.nio.channels.Selector;3233public class SelectAndClose {34static Selector selector;35static volatile boolean awakened = false;3637public static void main(String[] args) throws Exception {38selector = Selector.open();3940// Create and start a selector in a separate thread.41Thread selectThread = new Thread(new Runnable() {42public void run() {43try {44selector.select();45awakened = true;46} catch (IOException e) {47e.printStackTrace();48}49}50});51selectThread.start();5253// spin until make sure select is invoked54SelectorUtils.spinUntilLocked(selectThread, selector);5556// Close the selector.57selector.close();5859if (!awakened)60selector.wakeup();6162// Wait for select() thread to finish.63selectThread.join();6465if (!awakened) {66throw new RuntimeException("Select did not awaken!");67}68}69}707172