نمایش نتایج 1 تا 4 از 4

نام تاپیک: Thread safe

  1. #1

    Smile Thread safe

    Thread safe ینی چی؟

  2. #2
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: Thread safe

    یعنی میتونید در multi-threading (چند نخی) بدون نگرانی از مشکلاتی که در این حالت در برنامه نویسی به وجود میاد استفاده کنید.
    بذارید یه مثال ساده بزنم. فرض کنید یک کلاس دارید که داخلش یک متغیر private به اسم balance وجود داره و با دو متد setBalance() و getBalance() میتونید مقدار اون رو تغییر بدید و یا بخونید. اگر این متغیر موجودی حساب شما رو نشون بده اگر برنامه single thread باشه و یعنی فقط یک برنامه داره اجرا میشه و دو قسمت کد همزمان اجرا نمیشن، هیچ مشکلی وجود نداره و مثلا بخواید از موجودی حسابتون 1000 تومن کم کنید:
    setBalance(getBalance()-1000);


    اما اگر multi-thread باشه یعنی دو کد بتونن به این متدها دسترسی داشته باشن و مقدار balance رو تغییر بدن، اون موقع قضیه متفاوته. ممکنه همزمان شما بخواید 1000 تومن پول وردارید و بانکدار هم میخواد تمام پول شما رو برداشت کنه و پول نقد بده. همچنین هیچ وقت نباید پول حساب یک عدد کمتر از صفر بشه.
    اما اگر زمانی که شما مقدار موجودی رو میخونید میبینید 50 هزارتومان هست، میگید میشه 1000 تومان پول برداشت کنم. بانکدار هم میبینه 50 هزارتومان موجودی هست و 50 هزارتومان برداشت میکنه. از اونجایی که این کار همزمان انجام میشه اگر بانکدار زودتر 50 هزارتومان رو برداشت کنه و بعد شما 1000 تومان رو برداشت کنید یا عکس این، در هر صورت موجودی منفی میشه. البته ممکنه خیلی اتفاقات دیگه هم بیفته.
    در کل در چنین مواقعی از synchronization استفاده میکنند تا اگر دو کد همزمان میخواستن به یک متغیر دسترسی پیدا کنن، یکی قفل بذاره و وارد ناحیه بحرانی (critical section) بشه و دیگری وارد نمیشه و برای همین اتفاقی رخ نمیده. به این میگن thread safe

    شاید بگید این خیلی نادره ولی این یه مثال بود. تو برنامه که نمیخواد از کاربر ورودی بگیره، خیلی سریع کارها پیش میره و امکان چنین اتفاقاتی وجود داره. مثال بزنم، ArrayList که خیلی ازش استفاده میشه Thread Safe نیست و باید اگر در multi-threading استفاده میکنیم حواسمون باشه ولی Vector معادل همون اما Thread Safe هست و نیازی نیست نگران باشیم. اما باید توجه کنید سرعت کار با Vector کمتر از ArrayList هست و جایی که نیاز نیست ازش استفاده نکنیم

  3. #3

    نقل قول: Thread safe

    خیلی ممنون از توضیحاتتون.خیلی کامل و خوب بود...
    یه سوال در همین رابطه داشتم:
    من میخام یه تعداد تصویر و از یه ArrayList بگیرم وتوی JLabelبه صورت Slid نمایش بدم واسه اسن کار از Threadاستفاده کردم ولی فقط تصویر اخرو نشون میده نمیدونم شاید بخاطر همین
    Thread Safe نبودن ArrayList باشه .
    قسمتی از کد:
    public ArrayList<VariableData> getimagesList(){
    ArrayList<VariableData>imgList=new ArrayList<>();
    try {


    String query="select * from images_table";
    Statement st=getconnection().createStatement();
    ResultSet rs=st.executeQuery(query);
    while(rs.next()) {
    VariableData vd=new VariableData(rs.getInt("id"),rs.getBytes("image")) ;
    imgList.add(vd);
    }


    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return imgList;
    }
    حالا تو کد زیر از این arrayList استفاده کردم:


    :for(int i=0;i<getimagesList().size();i++){
    ImageIcon imgIcon=new ImageIcon(getimagesList().get(i).getImage());
    Image img=imgIcon.getImage();
    Image image=img.getScaledInstance(299,199,Image.SCALE_SM OOTH);
    ImageIcon imageIcn=new ImageIcon(image);
    Label.setIcon(imageIcn);
    try {
    Thread.sleep(2000);
    } catch (InterruptedException e1) {


    e1.printStackTrace();
    }
    }


    ولی بعد از چن ثانیه فقط عکس اخرو نشون میده؟کدم مشکل داره یا بخاطر همین
    Thread Safe نبودن ArrayList ؟

  4. #4
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: Thread safe

    هر چند اگر از multi-threading استفاده میکنید، سعی کنید از Vector استفاده کنید.
    مشکلی که میگید ارتباطی به multi-threading ارتباطی نداره، فکر میکنم به خاطر خطی هست که نوشتید:
    Label.setIcon(imageIcn);


    و هر بار icon شی Label رو تغییر میده و در آخر، آخرین عکس میمونه که حلقه for تمام شده.

تاپیک های مشابه

  1. توابع Thread safe
    نوشته شده توسط ayub_coder در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 8
    آخرین پست: جمعه 04 بهمن 1392, 17:19 عصر
  2. سوال: Thread Safe کردن یک کلاس کامل
    نوشته شده توسط UfnCod3r در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: سه شنبه 30 مهر 1392, 16:04 عصر
  3. برنامه نویسی thread safe
    نوشته شده توسط pswin.pooya در بخش طراحی و ساخت بازی‌های کامپیوتری
    پاسخ: 1
    آخرین پست: چهارشنبه 09 مرداد 1392, 15:53 عصر
  4. سوال: تفاوت بین Non Thread Safe و Thread Safe در ورژن 5.3 PHP
    نوشته شده توسط ali.e.v در بخش PHP
    پاسخ: 4
    آخرین پست: شنبه 07 شهریور 1388, 23:18 عصر
  5. Asp.net Cache thread safe
    نوشته شده توسط golagha_program در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: دوشنبه 05 مرداد 1388, 15:15 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •