Acho que uma das formas mais belas e inteligentes de usar threads (de forma responsavel e segura) foi através da VM BEAM do erlang.
O Beam separa as threads em cada uma sobe green threads, cujo são chamados processos.
Esses processos tem mailboxes que são a única forma de se comunicarem. E temos supervisores para cada processo.
Assim quando uma green thread tem algum problema, você pode matar ela e subir outra no lugar para continuar de onde parou.