In general, prefer interface. Their use is more flexible; users can easily make their classes implement multiple interfaces.
Abstract classes have the advantage that they can supply default implementations, and they can easily add new methods without breaking subtypes.
When you find yourself creating an abstract class,
you should also provide an interface it implements. This gives your clients the choice whether they want to use the interface or the abstract class. When you design an interface, make sure you plan it out well. Once an interface is released, it's impossible to change.
Two counter-examples from the standard API: the Observable and InputStream classes should have been interfaces instead of classes. In my opinion this was a huge oversight.