|
|
|
|
|
by eggsnbacon1
2232 days ago
|
|
Maybe I muddled my words on this. Java supports "requesting" thread cancellation, but its not safe to forcibly kill OS threads in any language I know of. For the same reason you can't in Java, finalizers won't run. This includes C and C# among others that use OS threads.
https://stackoverflow.com/questions/13285375/how-to-kill-a-r...
https://stackoverflow.com/questions/1327102/how-to-kill-a-th... Notably C lets you do it with the big warning that it can crash everything. C# made the same decision as Java and doesn't allow it. Java and pretty much all OS thread-using languages DO allow you to end threads by nicely asking them to stop. This is not the same as forcing them to. In all cases, if a thread is stuck in an infinite loop or a blocking call, it probably won't cancel if you ask it to. It depends on whether the thread is written to handle cancellation properly. This is also a limitation of some languages with fibers, including Erlang. You can't force a thread thats stuck in certain states to stop running in Erlang even though it uses fibers. Some languages with fibers do allow it though. |
|
Not at all. Thanks for your patience.
You've laid out really good arguments as to why Java Threads cannot be cancelled, and suggested that userspace threads -- which I (perhaps mistakenly) interpreted as CompletableFutures -- should be able to be cancelled.
But the thing is, I can cancel (request) Java Threads. And I cannot cancel CompletableFutures.
From my original comment:
> But CFs lack the functionality of Threads. A CF can't decide to sleep for a while, nor can it be cancelled.