Блокированные и ожидающие потоки Java

Блокированные и ожидающие потоки JavaКогда поток заблокирован или находится в состоянии ожидания, он временно не активен. Он не выполняет никакого кода и потребляет минимум ресурсов. На планировщике потоков лежит обязанность повторно активизировать его. Подробности зависят от того, как было достигнуто неактивное состояние. Читать

Обработчик неперехваченных исключений Java

Обработчик неперехваченных исключений JavaМетод run() потока не может генерировать никаких контролируемых исключений, но может быть прерван неконтролируемым исключением. В этом случае поток уничтожается.

Однако нет конструкции catch, куда может распространиться исключение. Вместо этого непосредственно перед смертью потока исключение передается обработчику неперехваченных исключений. Читать

Web-службы и JAX-WS в Java

Web-службы и JAX-WS в JavaЗа последние годы популярной технологии для вызовов удаленных методов стали Web-службы(Web-services). С технической точки зрения каждая Web-служба состоит из двух компонентов:

  • непосредственно самой службы, доступ которой может получаться с помощью транспортного протокола SOAP;
  • описания службы в формате WSDL. Читать

Использование локального буфера обмена для передачи ссылок на объекты Java

Использование локального буфера обмена для передачи ссылок на объекты JavaИногда может возникать необходимость в копировании и вставке данных такого типа, которые не поддерживаются системным буфером обмена, то есть не является сериализируемым. Для передачи ссылки на произвольный объект Java в пределах одной и той же виртуальной машины (JVM) применяется тип MIME:

Для этого типа требуется определять объект-оболочку Transferable. Необходимый для этого процесс полостью аналогичен процессу определения объекта-оболочки SerialTransferable. Читать

Прерываемые сокеты Java

Прерываемые сокеты JavaПри подключении с помощью сокета текущий поток блокируется до тех пор, пока соединение не будет установлено, или до истечения времени тайм-аута. Аналогично, если вы пытаетесь передать или прочитать данные посредством сокета, поток приостановит выполнение до успешного завершения операции или до окончания времени тайм-аута.

В реальных приложениях желательно предоставить пользователям возможность прервать слишком затянувшийся процесс установления соединения с помощью сокета. Однако если поток блокирован, поскольку не получает ответа от сокета, вы не можете разблокировать его, вызвав метод interrupt(). Читать

Одностороннее закрытие сокета Java

Одностороннее закрытие сокета JavaОдностороннее закрытие(half-close) обеспечивает возможность одной стороне закрыть соединение с сокетом, прекратив отправку своих данных, но при этом получая данные с другой стороны.

Вот типичная ситуация. Предположим, что вы отправляете данные на сервер, но не знаете, какой объем данных необходимо передать. Если вы имеете дело с файлом, то, закрыв его, вы тем самым определяете конец данных. Закрыв же сокет, вы немедленно разорвете соединение с сервером. Читать

Чтение и запись больших объектов Java

Чтение и запись больших объектов JavaВ дополнение к числам, строкам и датам, многие базы данных могут сохранять большие объекты(large object — LOB), к числу которых относятся изображения и другие данные. В языке SQL существует понятие больших двоичных объектов(binary large object — BLOB) и больших символьных объектов(character large object — CLOB).

Чтобы прочитать LOB, нужно сначала выполнить оператор SQL, а затем вызвать метод getBlob или getClob в ResultSet. В результате вы получите объект типа Blob или Clob. Чтобы получить двоичные данные из Blob, вызовите метод getBytes или getInputStream. Читать

Слабые хеш-карты Java

Слабые хеш-карты JavaКласс WeakHashMap был спроектирован для решения одной интересной проблемы. Что случится со значением, чей ключ более не используется нигде в вашей прогармме? Предположим, что последняя ссылка на ключ исчезла. Значит, не остается никакого способа сослаться на объект-значение. Но поскольку ни одна часть программы не содержит обращений к данному ключу, то и соответствующая пара «ключ/значение» не может быть удалена из карты.

Почему бы сборщику мусора не удалить ее? Разве это не его работа — удалять неиспользуемые объекты? Читать

Вызов унаследованного кода Java

Вызов унаследованного кода JavaДо появления Java SE 5.0 был написан огромный объем кода Java. Если бы обобщенные классы не могли взаимодействовать с этим кодом, они не получили бы широкого распространения. К счастью, достаточно просто использовать обобщенные классы вместе с их «сырыми» эквивалентами из унаследованного API.

Рассмотрим конкретный пример. Чтобы установить метки JSlider, вы используете метод:

Читать

Чтение и запись файлов, содержащих несколько изображений Java

Чтение и запись файлов, содержащих несколько изображений JavaНекоторые файлы, например анимационные GIF-файлы, могут содержать несколько изображений. Однако метод read() класса ImageIO позволяет считывать только одно из них. Для чтения нескольких изображений нужно преобразовать источник входных данных(например, входной поток файла) в объект ImageInputStream:

Затем следует соединить этот объект с программой чтения: Читать