MySQL Math с строкой, которая может не существовать для некоторых учетных записей [duplicate]

volatile:

volatile - это ключевое слово. volatile заставляет все потоки получать последнее значение переменной из основной памяти вместо кеша. Для доступа к изменчивым переменным не требуется блокировка.

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

Это означает, что изменения в переменной volatile всегда видны для других потоков . Более того, это также означает, что , когда поток читает переменную volatile, он видит не только последнее изменение волатильности, но также и побочные эффекты кода, которые привели к изменению .

Когда использовать: Один поток изменяет данные, а другие потоки должны считывать последнее значение данных. Другие потоки предпримут какое-то действие, но они не будут обновлять данные .

AtomicXXX:

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

Когда использовать: несколько потоков могут считывать и изменять данные.

синхронизировано:

synchronized - ключевое слово, используемое для защиты метода или кода. С помощью синхронного метода имеет два эффекта:

  1. Во-первых, невозможно, чтобы две вызовы методов synchronized на одном и том же объекте чередовали. Когда один поток выполняет метод synchronized для объекта, все другие потоки, которые вызывают методы synchronized для одного и того же объекта (приостановить выполнение) до тех пор, пока первый поток не будет выполнен с объектом.
  2. Second , когда метод synchronized завершает работу, он автоматически устанавливает связь между событиями и последующим вызовом метода synchronized для одного и того же объекта. Это гарантирует, что изменения состояния объекта видны для всех потоков.

Когда использовать: Несколько потоков могут считывать и изменять данные. Ваша бизнес-логика не только обновляет данные, но также выполняет атомные операции

AtomicXXX эквивалентна volatile + synchronized, хотя реализация отличается. AmtomicXXX расширяет volatile переменные + compareAndSet, но не использует синхронизацию.

Связанные вопросы SE:

Разница между летучей и синхронизированной в Java

Летучие булевы против AtomicBoolean

Хорошие статьи для чтения: (Над содержимым взяты с этих страниц документации)

https://docs.oracle.com/javase/tutorial/essential/concurrency/ sync.html

https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html

7
задан Crocode 8 November 2012 в 07:54
поделиться

3 ответа

CASE WHEN a.fieldname IS NULL 
       THEN 0
       ELSE a.fieldname
END AS fieldname
7
ответ дан sel 4 September 2018 в 07:55
поделиться

использовать ISNULL (поле, 0), это будет вставлять ноль, если поле NULL

9
ответ дан donebizkit 4 September 2018 в 07:55
поделиться

что-то вроде: -

SELECT * FROM
(SELECT ifnull(uID,0) as uID from Class) T1
   LEFT OUTER JOIN
 (SELECT ifnull(pID,0) as pID from University) T2
   ON T1.uID = T2.pID
2
ответ дан vineet 4 September 2018 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: