hirthwork
18.09.2012 12:01 mcabber9443A823
Как оказалось, в Java никак извне нельзя прервать поток, который читает с
диска. Т.е. InputStream.read() — непрерываемый (если внутри, конечно, не сокет).
Как с этим предлагает бороться Эккель: просто сделать InputStream.close() на
том ресурсе, на котором может заблокироваться поток.
Охуенный подход: «Как же нам снять котика с дерева? А давайте нахуй дерево
срубим!».
В плюсах и сишечке это делается простой посылкой сигнала потоку.
эм... а как _потоку_, не процессу, послать сигнал?
pthread_kill
точно, что-то запамятовал. вот только сильно это платформо-специфично
это работает на всех системах, которые имеются у меня дома, на работе и на рабочих серверах, так что никакой платформозависимости
ява работает не только на *nix/posix системах. Та же обёртка boost::thread или std::thread из c++11 не даёт интерфейса к pthread_exit и pthread_kill
апелляция к плюсам не катит. в Java у Thread можно вызвыть interrupt(), который разбудит поток находящийся в sleep() или wait()
просто в java InputStream.read() не совсем то, что read() в сишечке, скорее оно похоже на классическую обёртку над read(), которая продолжает читать, игнорируя EINTR
вот именно, что стоило б Sun в своё время сделать это по человечески