please refactor setItemValue methods and extract 

if (!item.getState().equals(dtValue)) {
 +				synchronized (item) {
 +					eventPublisher.postUpdate(item.getName(), dtValue);
 +					item.setState(dtValue);
 +				}
 +			}

into its own method