Похоже, это будет делать:
function html_entity_decode(s) {
var t=document.createElement('textarea');
t.innerHTML = s;
var v = t.value;
t.parentNode.removeChild(t);
return v;
}
Да, Вы правы, и Вы разобрались в объяснении также. Ничего особенного для добавления.
Примечание, что, если бы методы были статичны , то они синхронизировались бы на различных объектах, а именно, их соответствующие классы (A и B).
РЕДАКТИРОВАНИЕ : Почему я уверен? Я не знаю, почему Вы не уверены?;-) myObject
всего один объект - нет никакого различия между myObject
атрибуты, которые прибывают из класса A и тех, которые происходят из класса B. (Ну, технически Вы могли, вероятно, использовать отражение для обнаружения, которые являются, который, таким образом, должно быть приблизительно различие, но забывают об отражении на данный момент. Для общих операций на объекте нет никакого различия.)
Да, синхронизировался, эквивалентно синхронизируемому (это).
, Чтобы быть больше точный :
Для класса (статический) метод, блокировка, связанная с Объектом класса для класса метода, используется. Для метода экземпляра используется блокировка, связанная с этим (объект, для которого был вызван метод).
Если Вы хотите быть более явными о своей блокировке, Вы могли бы сделать что-то вроде этого:
class A {
protected final Object mutex = new Object();
public void myOneMethod() {
synchronized (mutex) {
// ...
}
}
}
class B extends A {
public void myOtherMethod() {
synchronized (mutex) {
// ...
}
}
}
На самом деле, этот шаблон рекомендуется Brian Goetz в Параллелизм Java на практике , разделите 4.2.1 "Шаблон монитора Java". Тем путем Вы знаете точно, куда Ваш монитор прибывает из.
Да. Использование Java "мониторы" для реализации синхронизации и синхронизированных методов использует экземпляр объекта, к ним обращаются как монитор, который является, очевидно, тем же в этом случае.
Примечание, что это не верно для статических методов! Там, экземпляр класса (я думаю) класс объявления используется, который не был бы тем же.
Да Вы корректны
, Когда один поток выполняет синхронизированный метод для объекта, все другие потоки, которые вызывают синхронизированные методы для того же объектного блока (приостанавливают выполнение) до первого потока сделаны с объектом. В этом случае объект является B
Небольшое дополнение для людей, которые могут быть заинтересованы в будущем ..
Кроме того, помните, что блокировки в Java реентерабельны. Если бы их не было, этот ваш код привел бы к тупиковой ситуации, поскольку, как вы указали, для обеих операций требуется одна и та же блокировка.