С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668

Значение ключевого слова final в контексте многопоточных программ

13.04.2014, 17:55. Показов 3039. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что можете поведать по теме сабжа?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2014, 17:55
Ответы с готовыми решениями:

Создание многопоточных программ
https://sites.google.com/site/bindingandserviceparallel/home/files В документе рассматривается принцип организации многопоточных...

Разработка многопоточных программ в Windows
Разработать программу вычисления максимального значения в двумерном массиве. Требования: 1.Количество потоков задаётся...

Вывести все слова текста, которые нельзя составить из «ключевого» слова
Помогите пожалуйста,в edit1 вводиться текст нужно вывести все слова текста, которые нельзя составить из «ключевого» слова. Ключевое слово...

32
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
13.04.2014, 18:07

Не по теме:

использовать его - это круто =)


а если по теме... final выполнится в независимости от того выскочила ошибка или нет (бывают исключения). => с помощью него можно например закрывать соединения или потоки ввода/вывода, даже в том случае если с программой что то пошло не плану.
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
13.04.2014, 18:32
Цитата Сообщение от reisal78 Посмотреть сообщение
а если по теме... final
Вы имели ввиду finally?
1
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
13.04.2014, 18:38
_Den_, и то верно, спасибо что поправили.
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
13.04.2014, 18:59  [ТС]
Цитата Сообщение от reisal78 Посмотреть сообщение
_Den_, и то верно, спасибо что поправили.
вообще-то неправильно.

вопрос про final и многопоточность
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.04.2014, 19:14
final говорит нам о том, что переменной может быть присвоено значение только 1 раз. Если это ссылка на объект, то состояние объекта изменять можно, но не ссылку (либо если примитив - то значение становится константой)
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
14.04.2014, 11:40  [ТС]
я это и так знаю)

Вопрос про другое же.
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
14.04.2014, 13:12
Будьте добры пример с
Цитата Сообщение от gredwhite Посмотреть сообщение
final в контексте многопоточных программ
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
14.04.2014, 13:20
Если все поля объекта объявлены как final, класс объявлен как final, и класс наследуется от неизменяемого класса, то такой класс называется неизменяемым.
Неизменяемые классы, не позволяют менять своё содержимое, и как следствие являются потокобезопасными. Объекта неизменяемых классом даже можно публиковать небезопасно: другой поток, никогда не сможет прочитать недоиницализированное состояние объекта.
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
14.04.2014, 13:29  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Если все поля объекта объявлены как final, класс объявлен как final, и класс наследуется от неизменяемого класса, то такой класс называется неизменяемым.
бр бр бр.
Как же можно отнаследоваться от final класса?

Цитата Сообщение от turbanoff Посмотреть сообщение
и как следствие являются потокобезопасными
хм, логично.

Цитата Сообщение от turbanoff Посмотреть сообщение
Объекта неизменяемых классом даже можно публиковать небезопасно: другой поток, никогда не сможет прочитать недоиницализированное состояние объекта.
куда публиковать? зачем?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
14.04.2014, 14:54
Цитата Сообщение от gredwhite Посмотреть сообщение
Как же можно отнаследоваться от final класса?
Ну там каноническое определение немного не такое: он должен наследоваться от класса, который не позволяет менять значение полей.

Добавлено через 1 минуту
Цитата Сообщение от gredwhite Посмотреть сообщение
куда публиковать? зачем?
Вот есть поле в классе, и один поток читает его, второй поток это поле инициализирует (вызывает конструктор и присваивает значение).
Если это поле не immutability-класса, то возможна ситуция, когда поле уже != null, но конструктор до конца еще не выполнился.

Добавлено через 1 минуту
Статья по теме - http://habrahabr.ru/post/143390/
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
15.04.2014, 17:41
turbanoff, может быть и хуже - конструктор выполнился, а поле еще не присвоено, собственно в этом и проблема.
gredwhite, статические final поля безопасны. нестатические - нет. ссылок не дам, ищите сами.
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
25.04.2014, 12:14  [ТС]
turbanoff, тяжело у меня идёт эта статья.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class NonVolatileDCLFactory {
    private Singleton instance;
 
    public Singleton get() {
        Singleton local = instance;
        if (local == null) {  // check 1
            synchronized(this) {
                local = instance;
                if (local == null) { // check 2
                    local = new Singleton();
                    instance = local;
                }
            }
        }
        return local;
     }
}
ну ок, мы стараемся не так часто лезть в синхронайз секцию и переписываем код как показано выше. Я что-то не понимаю зачем нам вообще нужна local переменная? почему не хватает просто instance ?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
25.04.2014, 13:01
gredwhite, Тоже не понимаю зачем она там. Впрочем, это не очень важно.
То есть, по определению, публикация $instance в NonVolatileDCL безопасной не является.
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
25.04.2014, 17:11
gredwhite, то, что вы написали называется "double checked locking". В старой JMM, до версии 1.4, эта конструкция была некорректной, т.е. она не гарантировала однократный вызов конструктора. В новой JMM эта конструкция будет корректной, если вы объявите instance volatile. Объяснение этого довольно сложное.
Короче, вы читаете сильно устаревшую и к тому же ошибочную статью.
Погуглите "double checked locking", найдете кучу информации.

Добавлено через 2 минуты
Еще лучше начать прямо со статей по JMM (java memory model).
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
25.04.2014, 17:50
bigwhitefish, Это то всё понятно. Можете объяснить зачем там локальная переменная участвует?
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
25.04.2014, 18:00  [ТС]
bigwhitefish, мы кажется слегка про другое.

а что в статье ошибочного?

turbanoff, Кстати кажется в тему(про публикацию(хоть я и не осознал пока что это)) то, что совместное использование final и volatile запрещено
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
25.04.2014, 19:35
turbanoff, зачем вообще нужен этот код? Предполагается, что он более быстрый. Локальная переменная дает доп. оптимизацию (по мысли автора). Если без нее, то будет
Java
1
2
3
4
5
6
   public Singleton get() {
        if (instance == null) {  // check 1
            .....
        }
        return instance;
     }
т.е. два чтения из поля объекта. А с локальной переменной - только одно.

gredwhite, в статье ошибочна концепция, я же написал. При условии, что это выдается за корректный вариант, конечно.

Цитата Сообщение от gredwhite Посмотреть сообщение
совместное использование final и volatile запрещено
Если это для вас новость, про многопоточность еще рано беспокоиться. И еще долго будет рано.
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
25.04.2014, 21:39  [ТС]
bigwhitefish, спасибо конечно, но так, для информации просто, в интерфейсе не запрещено public писать у методов и полей.
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
26.04.2014, 00:12
Э?
И?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2014, 00:12
Помогаю со студенческими работами здесь

Вывести слова, из которых нельзя составить ключевого слова, ключевое слово вводится отдельно
вывести слова из которых нельзя составить ключевого слова, ключевое слово вводится отдельно.. помогите, все что получается это вот и то не...

Слова текста, которые нельзя составить из «ключевого» слова
Дан произвольный текст на русском языке(который вводится в edit1) . Определить и вывести: Все слова текста, которые нельзя составить из...

Записать в файл все ключевые слова, встречающиеся в программе, указав количество появлений ключевого слова
Дана программа, написанная на языке Pascal. Записать в выходной файл построчно все ключевые слова, встречающиеся в этой программе, указав...

В чем разница между “static final” VS “final”?
"static final" и "final". Оба значения константы и изменению не подлежат. В чем же разница?

Поиск ключевого слова
Доброго времени суток. Недавно воспользовался данным форумом, очень помогло. Возник следующий вопрос ... Я нашел длину ключевого слова (4...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru