Вы не синхронизируете доступ к переменным в главном потоке.
Вам необходима такая же синхронизация / блокировка для переменных, чтобы гарантировать видимость обновлений.
Однако , ваша синхронизация на si
, вероятно, не будет работать так, как вы предполагали, потому что вы продолжаете присваивать этому полю новое значение: вместо этого синхронизируется на test.class
.
Подобным образом синхронизация, предоставляемаяlock
, вероятно, не работает так, как вы предполагаете, потому что каждый экземпляр test
имеет свою собственную блокировку.