Очень просто. Когда я использую метод, запустите так:
@Override
public void run() {
CraftRoulette.getInstance();
while(socket==null && outputstream==null && inputstream==null) {
System.out.println("ahah");
}
System.out.println("RUN");
while(socket!=null && !socket.isClosed()) {
System.out.println("STOP");
System.out.println("Checking");
checkForUpdatesOnServer();
}
if(socket!=null && socket.isClosed()) System.out.println("FODA-SE, MAS QUE BEM!");
}
это выводит:
ahah
(...)
ahah
RUN
STOP
Checking
Однако, если я удалю содержимое первого цикла:
@Override
public void run() {
CraftRoulette.getInstance();
while(socket==null && outputstream==null && inputstream==null) {
}
System.out.println("RUN");
while(socket!=null && !socket.isClosed()) {
System.out.println("STOP");
System.out.println("Checking");
checkForUpdatesOnServer();
}
if(socket!=null && socket.isClosed()) System.out.println("FODA-SE, MAS QUE BEM!");
}
Ничего не выводится.
Это единственное изменение, которое я применяю. Почему sysout поддерживает метод run, а не просто убивает его?
РЕДАКТИРОВАТЬ: Volatile на сокете сделал свою работу, спасибо!