Exiter.isAlone() main(). . ( Irreputable, )
8181 ( ). - , jvm (System.exist()). u , . , , , .
isAlone() . u (String [] s) , u , .
public class Exiter implements Runnable {
private static final Exiter instance = new Exiter();
private ServerSocket serverSocket;
private int port = 8181;
private boolean bStarting = true;
private Exiter() {
(new Thread(this)).start();
}
@Override
public void run() {
while (bStarting) {
try {
serverSocket = new ServerSocket(port);
bStarting = false;
awake();
} catch (IOException e) {
System.err.println("Exiter : "+e.getMessage()+" port "+port);
openSocketKillRequest();
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
try {
Socket s = serverSocket.accept();
System.err.println("Kimll Request from :" + s.getRemoteSocketAddress());
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
}
private void openSocketKillRequest() {
try {
System.err.println("Send request kill previous");
Socket socket = new Socket("localhost", port);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Exiter getInstance() {
return instance;
}
private synchronized void awake(){
notifyAll();
}
public synchronized boolean isAlone() {
if(bStarting){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return true;
}
}