Andrey gave a thorough summary of all four libraries. Here's my personal experience with two of them.
At my job we use both JYaml and SnakeYAML. We started with JYaml in the 2007-2008 timeframe when it appeared to be active. It has API similarities with XStream, which is a benefit for us. I introduced SnakeYAML in mid-2009 when I encountered a bug in JYaml and noticed there have been no new JYaml releases since 2007-08-19.
SnakeYAML has been very solid for us. It is a faithful port of PyYAML, which itself is considered good enough as to be a reference implementation of YAML 1.1.
Being a port of PyYAML, you will get very good interop between Java and Python if that's important to you as long you're not trying to serialize native types (beyond the basics: Strings, numbers, lists, maps).
Being as true to the YAML 1.1 spec as it is, SnakeYAML can be used as a YAML validator. Some of the only difficulty I've had with SnakeYAML has been getting it to load YAML generated from Perl via YAML::Syck. In almost all cases YAML::Syck was generating invalid YAML.
One drawback of SnakeYAML is that it's primarily meant to be a library for Java ↔ YAML binding. Using it as a general purpose YAML loader should be simpler. A low-level API is available, but you lose implicit typing and native object construction unless you add them back in. If you don't control the YAML production, then your code bears the burden of telling SnakeYAML how to handle unrecognized tags (see my enhancement request for more on this).
The maintainers provided example code on how to extend SnakeYAML to fit my use case. It's a measure of their good design that it was possible and a measure of their responsiveness that they provided the direction.