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 allow threads to communicate about the state of shared data
It makes the program run slower
It does not work on multi-core processors