In the producer-consumer problem, why is using just the synchronized keyword often not enough?
synchronized
It only synchronizes methods, not data
It does not work on multi-core processors
It makes the program run slower
It does not allow threads to communicate about the state of shared data