public void run() {
        while (this.run) {
            try {
                try {
                    if (getThreadCount() > 0) {
                        Socket client = this.server.accept();
                        System.out.println("Server: connection from client: " + client);
                        WorkerThread w = new WorkerThread(client, this, chatServer);
                        this.exe.execute(w);
                        try {
                            if (fReadLock.tryLock()) {
                                dekrementThreadCount();
                            } else {
                                w.close("BYE");
                            }
                        } finally {
                            fReadLock.unlock();
                        }
                    }
                } catch (SocketException e) {
                    System.out.println(this.server.getInetAddress() + ": Der Server wird beendet.");
                }
            } catch (IOException ex) {
                System.out.println("Start: " + ex);
                Logger.getLogger(TCPServer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.exit(0);
    }