Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГТЭУ инфа экзамен.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
149.71 Кб
Скачать

5.4.2.2. Преобразование аргументов метода

Преобразование аргументов метода происходит, когда фактические значения аргументов преобразуется к типу параметров метода или конструктора при его вызове. При этом всегда возможны расширяющие преобразования типов (как числовых, так и ссылочных) и недопустимы сужающие преобразования.

5.4.2.3. Преобразование в строку

Преобразование в строку происходит только в одном случае: когда бинарная операция + применяется к двум операндам, один из которых имеет тип String. В этой ситуации второй операнд также преобразуется к типу String, и результатом операции является конкатенация полученных строк.

5.4.2.4. Явное преобразование типа

Явное преобразование типа происходит, когда к операнду явно применяется операция приведения типа (type cast). В этой ситуации могут применяться все описанные выше виды преобразований типов, кроме преобразования в строку. Попытка явного преобразования к типу, отмеченная выше, как запрещенная, вызовет ошибку компиляции. Кроме того, на этапе выполнения возможна генерация исключения ClassCastException, если заданное преобразование недопустимо.

5.4.3. Преобразования типов числовых операндов

Преобразование типов в процессе вычисления числовых выражений имеет ряд особенностей. Они сводятся к двум случаям: преобразования операндов в унарных операциях и в бинарных операциях.

Перед выполнением унарной операции:

  • если операнд имеет тип byte, short или char, он преобразуется к типу int;

  • в остальных случаях его тип не изменяется.

Перед выполнением бинарной операции:

  • если один из операндов типа double, то второй также преобразуется к типу double;

  • в противном случае, если один из операндов типа float, то второй также преобразуется к типу float;

  • в противном случае, если один из операндов типа long, то второй также преобразуется к типу long;

  • в противном случае, оба операнда преобразуются к типу int.

Вопрос №50. Основные средства для работы с потоками выполнения.

Основные операции, доступные для потоков при работе с памятью:

  • use- чтение значений переменной из рабочей памяти потока,

  • assign- запись значений переменной в рабочую память потока,

  • read- получение значений переменной из основного хранилища,

  • load-Сохранение значений переменной, прочитанного их основного хранилища в рабочей памяти,

  • store- передача значений переменной из рабочей памяти в основное хранилище,

  • write- сохраняет в основном хранилище значений переменной переданной командой store.

  • При работе с переменными в потоке постоянно применяются команды use и assign для использования текущего значения и присвоение нового.

  • При получении данных read и load для считывания и сохранение результатов.

  • При пересылке данных store и write.

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

Для более строгого выполнения правил работы со значениями переменных существует модификатор volatile.

В основном хранилище для каждого объекта поддерживается блокировка lock unlock

Для изменения порядка доступа к переменным в потоках для реализации механизмов блокировок необходимо указывать ключевое слово synchronized в качестве синхронизации блока или метода. Тогда прежде чем начать выполнять действия, потоки блокируют объекты и вызываемые методы.

Статический static synchronized позволяет установить блокировку на объекты класса Class. При работе с блокировками могут возникать взаимные блокировки, приводящие к зависанию программы. Каждый объект в java дополнительно имеет wait-set набор потоков исполнения. Любой поток может вызвать метод wait() объекта с доступом в его поток. Тогда выполнение такого потока приостанавливается, пока другой потом не вызовет у этого объекта метод notify all() или notify, пробуждающий все или один поток.