SomeClass
, даже если он является Runnable, это просто обычный класс, и к объектам этого может обращаться любой поток, имеющий ссылку на него . В вашем примере. вы нигде не вызываете updateNumber()
форму, но если вы вызываете ее после p.start (), вы обращаетесь к ней из потока, который фактически создал экземпляр. Если вы звоните updateNumber()
в run()
, то вы обращаетесь к нему из только что начатой цепочки.
Другой вопрос: безопасно ли в вашей настройке изменять его из нескольких потоков? ответ - нет. Вы должны объявить его как volatile
(скажем,) или synchronize
, если вы меняете его на основе текущего значения. Как и что синхронизировать, зависит от того, что вы на самом деле делаете с ним.