public void run() {
		try {
			selector = Selector.open();
			ServerSocketChannel serverChannel = ServerSocketChannel.open();
			serverChannel.configureBlocking(false);
			serverChannel.socket().bind(
					new InetSocketAddress("localhost", READ_PORT));
			serverChannel.register(selector, SelectionKey.OP_ACCEPT);
			while (run) {
				selector.select();
				Iterator keys = selector.selectedKeys().iterator();
				while (keys.hasNext() && run) {
					SelectionKey key = (SelectionKey) keys.next();
					keys.remove();
					if (!key.isValid()) {
						continue;
					}
					if (key.isAcceptable()) {
						ServerSocketChannel server_channel = (ServerSocketChannel) key
								.channel();
						SocketChannel channel = server_channel.accept();
						channel.configureBlocking(false);
						channel.register(selector, SelectionKey.OP_READ);
					} else if (key.isReadable()) {
						SocketChannel channel = (SocketChannel) key.channel();
						ByteBuffer buffer = ByteBuffer.allocate(1000);
						int numReadBytes = -1;
						numReadBytes = channel.read(buffer);
						if (numReadBytes != -1) {
							if (lock.testOwner()) {
								IT.log("Mutex aquired...");
								lock.setOwnerTrue();
							} else {
								IT.log("Mutex ignored...");
								release();
							}
						}
					}
				}
			}
		} catch (IOException ex) {
			Logger.getLogger(Mutex.class.getName()).log(Level.SEVERE, null, ex);
		}
	}