SettableFuture, или как выстрелить себе в ногу сферическим велосипедом в вакууме
Хабы: JAVA Сегодня я расскажу про дизайн тривиального concurrent-класса в Java. Может быть, это будет удобнее, чем абстрактно объяснять разные концепции из JMM и concurrent-кода.
Все продвинутые парни знают, что такое Future
Частенько в написании хардкорного concurrent-кода требуется такой примитив, как SettableFuture
За свою недолгую жизнь я видел несколько вариантов реализации такого SettableFuture, рассмотрим некоторые из них, и на заботливо разложенные в них грабли. Большинство примеров реально существовали, некоторые из них были домыслены ради плавности изложения. Чтобы вам не было сильно скучно, попробуйте не читать объяснение после каждого примера, а найти грабли самостоятельно. Для уменьшения простыни мы реализуем только методы set() и get(). Все персонажи вымышлены, хотя пост и основан на реальных событиях.
Achtung: пост-простыня под катом.
Читать дальше →