Синхронизированное ключевое слово в Java связано с безопасностью потоков, то есть когда несколько потоков читают или записывают одну и ту же переменную. Это может произойти напрямую (путем доступа к одной и той же переменной) или косвенно (с использованием класса, который использует другой класс, который обращается к той же переменной).
Ключевое слово synchronized используется для определения блок кода, в котором несколько потоков могут безопасно обращаться к одной и той же переменной.
Синтаксис ключевого слова synchronized
принимает Object
как его параметр (называемый объект блокировки ), за которым затем следует { block of code }
.
Добавление ключевого слова synchronized
в определение метода равно всему телу метода завершается в синхронизированном блоке кода с объектом lock , являющимся this
(например, методами) и ClassInQuestion.getClass()
(для методов класса) .
- Метод экземпляра - это метод, который не имеет ключевого слова static
. - Метод класса - это метод, имеющий ключевое слово static
.
Без синхронизации не гарантируется, в каком порядке происходит чтение и запись, возможно, оставив переменную с мусором. (Например, переменная может содержать половину бит, написанных одним потоком и половиной бит, написанных другим потоком, оставляя переменную в состоянии, которое ни один из потоков не пытался записать, но объединенный беспорядок оба.)
Недостаточно выполнить операцию записи в потоке до (настенное время) другой поток читает ее, потому что аппаратное обеспечение может кэшировать значение переменной и поток чтения будет видеть кэшированное значение, а не то, что было написано на нем.
Таким образом, в случае Java вы должны следовать модели памяти Java, чтобы гарантировать, что ошибки потоковой передачи не произойдет. Другими словами: Используйте синхронизацию, атомные операции или классы, которые используют их для вас под капотами.
Источники
http: //docs.oracle.com/javase/specs/jls/se8/html/index.html Спецификация языка Java®, 2015-02-13
blockquote>
При компиляции проекта необходимо внести просто пару изменений в make-файл.
sdl-config --libs
, используйте sdl-config --static-libs
sdl-config --static-libs
с -Wl,-Bstatic
и -Wl,-Bdynamic
. Это говорит GCC вызывать статическое подключение, но только для библиотек, указанных между ними. , Если Ваш make-файл в настоящее время похож:
SDLLIBS=`sdl-config --libs`
Изменение это к:
SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic
Это на самом деле то же самое, которое Вы должны делать в подобных Unix системах, но это обычно не вызывает, как многим ошибкам на Unix - нравится при использовании более простого -static
, флаг к GCC, как он делает в Windows.
Поэтому SDL освобождает, находятся под LGPL-лицензией.
, Если Вы хотите к статической ссылке освобождение (можно сделать это если Ваш перекомпилировать их. Требуется некоторое взламывание make-файлов, хотя) необходимо поместить игру в соответствии с некоторой совместимой лицензией Open Source также.
SDL-освобождение, прибывшее как совместно использованные библиотеки, потому что большинство программ, которые используют их, является закрытым исходным кодом. Двоичное распределение происходит в форму, в которой нуждается большинство людей.
Через этот сообщение списка рассылки SDL кажется, что sdl средства разработки поставлются со сценарием sdl-конфигурации, который можно использовать с - статичный - освобождает флаг для определения, какой компоновщик отмечает Вас, должен использовать.
В моей системе (Ubuntu) я должен использовать следующие флаги:
-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl
Это связывает SDL, SDL _
изображение и многие их зависимости как статические. libdl вам никогда не понадобится статический, поэтому создание полностью статического двоичного файла, использующего образ SDL _
, - плохая идея. pulse, caca, aa и directfb, вероятно, можно сделать статическими. Я еще не успел понять их.