# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا > سوال: کش کردن یعنی چی؟

## Sina.iRoid

سلام. میشه در مورد کش کردن توضیح بدین. مثلا در مبحث تردها میگن برای جلوگیری از کش کردن یه متغیری و به صورت Volatile تعریف می کنند. ممنون.

----------


## cups_of_java

کش کردن به طور عامیانه یعنی اینکه شما یه چیزی رو یه جا دم دستت نگه داری تا بتونی سریع تر در اختیار دیگران قرارش بدی....
اگه شما پروندتون توی یه سازمان در گردش باشه... اون رو از بایگانی در میارن و تا یک هفته بر نمیگردن به بایگانی تا هر سری که نیاز میشه دم دست باشه و زمان زیادی طول نکشه تا هی درش بیارن و دوبازه بزارنش توی بانگانی هر دفعه... 
هر ترد هم برای خودش یه حافظه و دسترسی هایی داره که فقط خودش میبینه. و این با اون حافظه برنامه شما فرق داره... چون اگه بخواد هر ترد در هر چرخه اجرا به حافظه اصلی (Memory یا RAM) سیستم دسترسی باشه خیلی کند خواهد بود اجرای برنامه بنابراین هر ترد یک فضای کوچیک و محدود به خودش رو توی پردازنده داره که اصطلاحن کش میگن. شما وقتی یک متغیر تعریف میکنید توی برنامه اون متغیر توی حافظه اصلی نگهداری میشه اما هر تردی هم برای خودش یه کپی ازش توی کش اش داره و اینجاست که همزمانی ترد ها می تونه دردسر هایی رو در دست زدن جند ترد موازی به یک متغیر ایجاد کنه... چون وفتی ترد مینویسه مقدار متغیر رو در واقع اول کش خودش رو به روز میکنه و بعد از اون حافظه اصلی به روز میشه....
واسه اینکه این عملیات اتومیک و هرچه ممکنه تک مرحله ای بشه از volatile میشه استفاده کرد...

----------

