public static void checkStatus(final Service service) {
        if (!service.canDirectCheck()) {
            System.out.println("Can't direct check " + service.name() + " as there is no url to ping.");
            return;
        }

        //A check is already running for this service
        if (threads.containsValue(service)) return;

        Thread a = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Status status = new Status(service);
                        status.timeChecked = new Date();

                        try {status.statusInfo = getServiceResponce(service);}
                        catch (IOException ex) {
                            System.out.println("Could not connect to check the Service " + service.name() + "[IOException]");
                            status.updateStatus = Status.UpdateStatus.FAILED;
                        }

                        status.statusLevel = status.findStatusLevel();
                        status.timeFinished = new Date();
                        status.updateStatus = Status.UpdateStatus.DONE;

                        completedCheck(Thread.currentThread(), status);
                    }
                })
        ;

        synchronized (Thread.currentThread()) {
            threads.put(a, service);
        }

        a.start();
    }