چند سوال در مورد استفاده همزمان از متغیر ها یا اشیاء در چندین ترد
سلام دوستان. من چند تا شی مثل (()MyClass myclass = new MyClass ) و چند تا متغیر مثل ( long, int و ...) دارم. حال سوالاتی در این مورد دارم.
1. اگر چندین ترد همزمان مشغول خواندن شی یا متغیر یکسان بودند، آیا مشکلی ایجاد می شود؟
2. اگر چندین Thread در یک لحظه در حال عوض کردن مقدار یک متغیر یا شی بودند، آیا مشکلی ایجاد می شود؟
3. اگر من در یکجا در حال خواندن یک شی یا متغیر بودم و در جای دیگر در حال عوض کردن مقدار آن متغیر یا شی بودم، آیا مشکلی ایجاد می شود؟
آیا به چیز خاصی بستگی دارد؟ اگر مشکلی ایجاد می شود من باید چیکار کنم؟ این که همش از Atomic ها استفاده کنم، سرعت رو خیلی میاره پایین. ممنون میشم اگر دوستان راهنمایی کنند. اگر نیاز به کد بود بگید تا کد مشابه رو بنویسم بذارم.
سلام
جواب همه سوالهای بالا بله هست ... چرا که یکیش عوض میکنه اونیکی در حال عوض کردن هست و مقداری گم میشود در وسط!
مثلا قراره با دو ترد یه متغییر مشترک رو ببرید بالا مثلا تو هرکدوم 1000 واحد که هر بار 1 واحد ... اگر تست کنید و نتیجه رو ببینید مقدار ممکن هست 1800 باشه درحالی که باید 2000 میبود!
برای راه حل کلاسهای سطح بالا که زیاد هست بستگی به نوع کارتون میتونید استفاده بکنید ولی اصلیترین روش و قدیمیترین روش اینه که اون شی رو قفل کنید که با کلمه کلیدی synchronized میشه این کار رو کرد.
موفق باشید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .