Мне нужно синхронизировать этот метод [get] или он не нужен, поскольку он имеет только одно утверждение ??
Это не имеет никакого отношения к 1 или более заявлениям. Это зависит от того, было ли значение обновлено в другом потоке, и если вы хотите, чтобы все потоки видели согласованное значение.
Если поле number
было обновлено в thread1, то thread2 может получить либо исходное значение, либо новое значение в зависимости от синхронизации синхронизации. Чтобы иметь значение, опубликованное соответствующим образом, как набор, так и метод получения должны synchronized
.
Если вы просто пытаетесь поделиться int
значение, то маркировка на number
поле как volatile
будет работать или с помощью AtomicInteger
разделить значение между несколькими потоками надежно может быть более подходящим.
private volatile int number;
или использование:
private AtomicInteger number = new AtomicInteger();
У меня также есть аналогичный вопрос, связанный с синхронизацией [здесь] (https://stackoverflow.com/questions/47783712/do-not-share-same-socket-between-two-threads-at-the-same-time /), где я использую синхронизацию на объекте сокета, и я пытаюсь выяснить, могу ли я вообще избавиться от синхронизации или каким-то другим эффективным способом? Хотел посмотреть, сможете ли вы помочь. – john
Он сделал @DavidSchwartz. В комментарии есть ссылка на его вопрос. – Gray