Personally I am using high level concurrency abstractions cause they are much easier. Actually I cannot remember the last time I have used a theads. But on the technical interview it is a frequently asked question. And yeah I ask about it too.
Are there any use cases when it is necessary to use low level Thread API instead of Executors/Locks/Latches/etc.?
Is there any reason to discuss low level thread API during the technical interview?
If you want to implement something very specific, you’re stuck with legacy code, an old version of Java or you need an abstraction that’s not provided, then I’d consider using the raw low level threading API. Even when there’s an old version / legacy code in use though bear in mind that making the switch to the newer API may well be worth it if it drives maintenance down – personally I try to keep the amount of user generated concurrent code at a minimum!