Прежде всего, чтобы ответить на ваш конкретный вопрос, вы уже достигли своей цели.Вы объявили, что ваш конструктор является закрытым, что означает, что ни один внешний класс не может назвать его как new PeriodicChecker()
.
Однако, глядя на ваш код, есть ряд других проблем:
Во-первых, высоздание экземпляра вашего класса в его собственном статическом конструкторе.Цель статического конструктора - инициализировать любое статическое состояние, которое может иметь ваш класс, от которого могут зависеть экземпляры вашего класса.Создавая экземпляр класса в статическом конструкторе, все эти гарантии выходят за пределы окна.
Во-вторых, я не думаю, что ваш поток будет вести себя так, как выожидайте, что он будет вести себя, в первую очередь потому, что вы на самом деле не запускаете другой поток :).Если вы намереваетесь начать новый поток, вам нужно вызвать метод start()
для этого объекта потока.Вызов run()
, как вы делаете, на самом деле не создает новый поток, а просто запускает метод run()
в текущем потоке.
В настоящее время, когда вы хотите создать новый поток, чтобы сделать что-то, рекомендуемый способдля достижения этого нужно не расширять Thread
, а вместо этого реализовать интерфейс Runnable
.Это позволяет вам отделить механизм потока от поведения, которое вы намереваетесь запустить.
Исходя из ваших требований, я бы предложил покончить с классом верхнего уровня, подобным этому, и вместо этого создать отдельныйвнутренний класс в вашем коде запуска приложения или даже использовать анонимный внутренний класс:
public class Main {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
System.out.println("Thread is doing something");
Thread.sleep(5000);
}
}
}).start();
}
}