Throwable is a class for all the bad situations, which can arise: Errors & Exceptions.
Error is something, you can't handle at all: OutOfMemoryError, VirtualMachineError, etc.
Exception is for exceptional cases.
Exceptions come in 2 flavours:
RuntimeExceptions.
These ones, you are not aware of: NullPointerException, ClassCastException, etc.
Checked exceptions.
These are the exceptions, which your code is aware of and should be explicitely catched (... throws MyException): IOExceptions, etc.
If you want the users of your code, to explicitely handle some exceptional situations, it would be good to just extend Exception, not the RuntimeException. There's no need to extend Throwable.