2011-02-02 4 views
-1

Когда я читаю концепцию потоков java, я видел инструкцию i.e «когда дело доходит до потоков, очень мало гарантировано». Любой может объяснить это вкратце.java threads concept

+2

В какой документации вы обращаетесь? –

+0

scjp kathy's sierra book – satheesh

+1

Это кажется полностью фиктивным, по крайней мере, без дополнительного контекста. –

ответ

2

Возможно, это связано с тем, что порядок выполнения инструкций в двух потоках не гарантируется, и вы не можете полагаться на него, то есть порядок может быть определенным образом в одной системе и может быть совершенно другим на машина с другим оборудованием. Его даже не гарантировано в той же системе, вы получите одну и ту же последовательность в нескольких прогонах.

1

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

1

Я не читал книгу сам, и это зависит от более широкого контекста. Но, вероятно, речь идет о безопасности потоков и о том, как вам нужно делать дополнительные шаги в многопоточной среде, чтобы гарантировать, что ваш код является потокобезопасным, - предотвращение таких ситуаций, как тупиковая ситуация, оживление и расовые опасности (все из которых могут проявляться в раздражающем, трудно отслеживаемом пустые пути, которые вызывают много времени и головную боль.) Поэтому попытка предотвратить это происходит в первую очередь намного лучше, чем иметь дело с последствиями позже.

Типичный (простой) пример может быть продемонстрирован классом A, который содержит два поля: x и y. Когда следующий метод называется х и у обоих увеличивается:

public void inc() { 
    x++; 
    y++; 
} 

Теперь обычно вы бы предположить, что это атомарная операция, единственным результатом вызова этого метода является то, что х и у обоих увеличивается. Однако в многопоточной среде это невозможно автоматически гарантировать. Есть вероятность, что после приращения x текущий поток будет упущен, а другой может войти и использовать этот объект в недопустимом состоянии, что может вызвать проблемы.

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

Я бы рекомендовал Java-параллелизм в практической книге в качестве дальнейшего чтения, это отличная книга, которая очень хорошо объясняет проблемы с нарезкой.

+0

Великий сэр ... я понял, что это потокобезопасная слишком.... – satheesh