Что происходит в Singleton Pattern, когда два или более потоков выполняются одновременно? [Дубликат]

var app = angular.module('myapp', []);

app.filter('htmlToPlaintext', function()
{
    return function(text)
    {
        return  text ? String(text).replace(/<[^>]+>/gm, '') : '';
    };
});

<p>{{DetailblogList.description | htmlToPlaintext}}</p>
1
задан Thilan Ravindu 17 January 2019 в 05:35
поделиться

2 ответа

Почему вы думаете, что вызов getA() из разных потоков должен создавать разные объекты? Приложение имеет только одну static область. Таким образом, в этом случае оба потока должны использовать один и тот же объект.

И в вашем примере вы вызываете метод m(), используя основной поток. Вы должны переопределить метод run(), чтобы эффективно использовать несколько потоков. Добавьте следующий метод в ваши классы Test1 и Test2.

public void run() {
   m();
}

и удалите следующие строки из вашего метода main,

t1.m();
t2.m();
0
ответ дан Roshana Pitigala 17 January 2019 в 05:35
поделиться

Вы звоните m() в главном потоке. Чтобы вызвать его в отдельном потоке, вам необходимо переопределить метод run() в ваших классах потоков и вызвать m() из run().

Как только вы исправите это, очень маловероятно, чтобы оба потока вошли в блок одновременно, вплоть до наносекунд. Вы можете попробовать создать множество потоков и циклов выполнения, чтобы увидеть проблемы параллелизма. Но поскольку a является статическим, «новый» объект быстро перезапишет старый экземпляр.

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

0
ответ дан Kartik 17 January 2019 в 05:35
поделиться
Другие вопросы по тегам:

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