Потоки выполняются параллельно, что означает, что НЕ гарантируется, что ваше сокетное соединение завершится немедленно, но вы ошибочно полагаете, что вы наступаете на классическое состояние гонки, потому что в момент вызова getSocket()
соединение все еще устанавливается (но этот процесс еще не завершен), поэтому переменная socket
по-прежнему null
, поскольку она была инициализирована при создании экземпляра вашего SocketHandler
.
Вам необходимо синхронизировать код, выполнить обратный вызов или (для целей тестирования) подождать немного перед вызовом getSocket()
или прочитать пару раз (т.е. в цикле + некоторая задержка / тайм-аут, если значение сокета не равно *). 1008 * (но учтите, что null
также должно быть допустимым значением в случае сбоя подключения к сокету).
Кроме того, почему вы читаете сокет в главном потоке, если вы создаете в отдельном потоке? разве вы не должны делать всю работу с сокетами в этом потоке?