In general, catching Throwable is not the right thing to do. A java.lang.Error usually indicates a very bad situation that means "all bets are off".
I like to let Error, and often RuntimeException, percolate up as far as possible in code. However, it may be worth catching either or both at the top of the call-stack, in main() of the application, or run() of the
thread. This particularly if you want to do some logging or something.
Extra-special care should be taken of OutOfMemoryError, because this is a particularly bad Error. Squashing that is almost always going to be a bad idea.
If I see code that liberally sprinkles catch(Exception e) or catch(Throwable t), I tend to suspect that the programmer could not be bothered to think about error handling. In a quick-and-dirty utility, that can be excused; in industrial-strength code, it can't.