Я предполагаю, что OP имеет в виду синхронизацию объекта, используемого в многопоточности, а не ключевое слово в Java.
Это мое понимание после прочтения Гетца различных уровней синхронизации в Java.
Предположим, у нас есть объект, который мы должны использовать в 132 потоках, которые используют объект непрерывно, чисто случайным образом, скажем, в течение 100 лет.
abstract Class ICount {
int i;
String iString;
public void add(int i);
public void sub(int i);
public void synchronized print(){
assert(i == Integer.valueOf(iString));
System.out.println("i"+String.valueof(i)+" == "+iString);
}
}
Теперь могут быть разные реализации, которые либо по замыслу, либо по неосторожности могут быть поточно-ориентированными на разных уровнях.
- Реализация безопасной потоковой синхронизации: Гарантирует, что любой java-код, который не использует отражение, чтобы прикрутить объект, используя эту реализацию, никогда не попадет в assert.
- Параллельная реализация синхронизации: Помимо обеспечения безопасности потоков, автор этой реализации попытался разрешить параллельные выполнения, когда это было возможно, а также сделал попытку избежать блокировок (конфликтов).
- Реализация небезопасной синхронизации потоков: Разработчик этого, по крайней мере, знает, что его класс не является потокобезопасным, и просит вас не использовать эту реализацию, если у вас нет только одного потока.
Если бы это было реальной проблемой, большая часть практической реализации относится к четвертой категории «синхронизации», то есть иногда она работает, а не к документации, достаточной для категоризации в одну из вышеуказанных категорий, и, следовательно, по умолчанию попадает четвертая категория.