hirthwork 18.09.2012 12:01 mcabber9443A823

Как оказалось, в Java никак извне нельзя прервать поток, который читает с
диска. Т.е. InputStream.read() — непрерываемый (если внутри, конечно, не сокет).
Как с этим предлагает бороться Эккель: просто сделать InputStream.close() на
том ресурсе, на котором может заблокироваться поток.
Охуенный подход: «Как же нам снять котика с дерева? А давайте нахуй дерево
срубим!».
В плюсах и сишечке это делается простой посылкой сигнала потоку.

1. hatred 18.09.2012 23:38 Psi+

эм... а как _потоку_, не процессу, послать сигнал?

2. hirthworkhatred /1 19.09.2012 01:09 talkonaut-iphone_5.91_67b1c873

pthread_kill

3. hatredhirthwork /2 19.09.2012 01:11 Psi+

точно, что-то запамятовал. вот только сильно это платформо-специфично

4. hirthworkhatred /3 19.09.2012 01:13 talkonaut-iphone_5.91_67b1c873

это работает на всех системах, которые имеются у меня дома, на работе и на рабочих серверах, так что никакой платформозависимости

5. hatredhirthwork /4 19.09.2012 01:18 Psi+

ява работает не только на *nix/posix системах. Та же обёртка boost::thread или std::thread из c++11 не даёт интерфейса к pthread_exit и pthread_kill

6. hirthworkhatred /5 19.09.2012 01:44 talkonaut-iphone_5.91_67b1c873

апелляция к плюсам не катит. в Java у Thread можно вызвыть interrupt(), который разбудит поток находящийся в sleep() или wait()

7. hatredhirthwork /6 19.09.2012 01:50 Psi+

просто в java InputStream.read() не совсем то, что read() в сишечке, скорее оно похоже на классическую обёртку над read(), которая продолжает читать, игнорируя EINTR

8. hirthworkhatred /7 19.09.2012 03:13 mcabberF04C8CEF

вот именно, что стоило б Sun в своё время сделать это по человечески

Do you really want to delete ?