آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

چند سوال در مورد استفاده همزمان از متغیر ها یا اشیاء در چندین ترد

Hadi  8 سال پیش  8 سال پیش
0 0

سلام دوستان. من چند تا شی مثل (()MyClass myclass = new MyClass )  و چند تا متغیر مثل ( long, int و ...) دارم. حال سوالاتی در این مورد دارم.

1. اگر چندین ترد همزمان مشغول خواندن شی یا متغیر یکسان بودند، آیا مشکلی ایجاد می شود؟

2. اگر چندین Thread در یک لحظه در حال عوض کردن مقدار یک متغیر یا شی بودند، آیا مشکلی ایجاد می شود؟

3. اگر من در یکجا در حال خواندن یک شی یا متغیر بودم و در جای دیگر در حال عوض کردن مقدار آن متغیر یا شی بودم، آیا مشکلی ایجاد می شود؟

آیا به چیز خاصی بستگی دارد؟ اگر مشکلی ایجاد می شود من باید چیکار کنم؟ این که همش از Atomic ها استفاده کنم، سرعت رو خیلی میاره پایین. ممنون میشم اگر دوستان راهنمایی کنند. اگر نیاز به کد بود بگید تا کد مشابه رو بنویسم بذارم.

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
k112  8 سال پیش
+2 0

سلام 

جواب همه سوالهای بالا بله هست ... چرا که یکیش عوض میکنه اونیکی در حال عوض کردن هست و مقداری گم میشود در وسط!

مثلا قراره با دو ترد یه متغییر مشترک رو ببرید بالا مثلا تو هرکدوم 1000 واحد که هر بار 1 واحد ... اگر تست کنید و نتیجه رو ببینید مقدار ممکن هست 1800 باشه درحالی که باید 2000 میبود!

برای راه حل کلاسهای سطح بالا که زیاد هست بستگی به نوع کارتون میتونید استفاده بکنید ولی اصلیترین روش و قدیمیترین روش اینه که اون شی رو قفل کنید که با کلمه کلیدی synchronized میشه این کار رو کرد.

موفق باشید

0 0
ببخشید که من دیر جواب میدم. همین سوال رو تو stack پرسیدم. همشون گفتن که بستگی داره و کتاب همزمانی تو جاوا رو بهم معرفی کردم. نمیشه حتمی گفت که مداخله پیش میاد. بستگی به چیزایی داره. (8 سال پیش)
0 0
توضیح دادم ... اونا همون حرف من رو گفتن ... اگر شما با چند ترد یک شی رو تغییر بدی قطعا دچار مشکل میشوید حالا احتمال داره سیستم قوی باشه یا کاری که انجام میدن ساده باشه تداخل نخورن! کتاب خیلی خوبی معرفی کردن مطالعه بکنید به نتایج خوبی میرسید... موفق باشید (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .