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

نام تاپیک: یه مشکل اساسی در مفهوم Thread

  1. #1

    Question یه مشکل اساسی در مفهوم Thread

    سلام من در مفهوم Thread به مشکل برخوردم ! یه قانون تو Threadها هستش که اگه Thread والد ازبین بره یا بمیره Threadهای فرزندش هم نابود میشن و دیگه اجرا نمیشن. الان من همین مفهوم رو تو متد Main که خودش یه Thread هست تست کردم ولی به مشکل برخوردم. من یه Exception تو main بوجود میارم قاعدتا نباید تردهام ادامه پیدا کنن. چون من اون‌هارو join نکردم.

    بهتر بخوام بگم من یک متد main دارم که خودش یک Thread هستش و داخل این متد دو Thread به نام‌های t1 , t2 ساختم که پنج‌بار اسم همون Thread رو در خروجی چاپ میکنن. بعد اینکه دو Thread t1 , t2 رو استارت کردم یک Exception در انتهای main توسط 1/0 ایجاد کردم. همون جوری که میدونیم چون اولویت Thread متد main بالاتراز دیگر Threadها هستش اول این Thread به انتها میرسه پس این Exception رخ میده و Thread متد main میمیره یا ازبین میره ولی مشکل اینجاست که هر دو Thread من t1 , t2 تا انتها انجام میشن و بعد برنامه بسته میشه چرا؟ مگه با بسته شدن Thread main نباید دیگر Threadها ازبین برن!؟


    public class Main {
    public static void main(String[] args) {

    Thread t1 = new Thread(){
    @Override
    public void run() {
    for (int i = 0; i < 5; i++) {
    System.out.println(Thread.currentThread().getName( ));
    }
    }

    };
    Thread t2 = new Thread(){
    @Override
    public void run() {
    for (int i = 0; i < 5; i++) {
    System.out.println(Thread.currentThread().getName( ));
    }
    }

    };

    t1.setName("T1");
    t2.setName("T2");

    t1.start();
    t2.start();

    System.out.println(1/0);
    }

    }


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

    نقل قول: یه مشکل اساسی در مفهوم Thread

    یه قانون تو Threadها هستش که اگه Thread والد ازبین بره یا بمیره Threadهای فرزندش هم نابود میشن و دیگه اجرا نمیشن.
    فکر میکنم مشکل از این جمله هست. بین thread ها رابطه parent-child برقرار نیست

    منبعی برای این جمله دارید؟
    آخرین ویرایش به وسیله vahid-p : یک شنبه 24 دی 1396 در 21:52 عصر

  3. #3

    نقل قول: یه مشکل اساسی در مفهوم Thread

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    فکر میکنم مشکل از این جمله هست. بین thread ها رابطه parent-child برقرار نیست

    منبعی برای این جمله دارید؟
    بهتر بود میگفتم من یه قانون برای خودم فرض کردم که بین Threadها یه رابطه paren-child هست درصورتی که اینطور نیست ولی من چرا همچین چیزی گفتم!؟ فرض میکنیم ما یه Thread داریم به نام parent خب حالا دو thread دیگر داریم به نام child1 و child2. حالا من تا زمانی که parent رو استارت نکنم نمیتونم child1 و child2 رو استارت کنم. کلا من یه دیدگاه برای خودم بوجود آوردم که threadی که درون خودش threadهای دیگری داره parent یا والد threadهای درون خودش هست درصورتی که هیچی به اونها ارث نمیده و من کلا منظورم ارث بری نبود. و کلا و قطعا بین threadها رابطه parent-child برقرار نیست. این از این. خب برگردیم به سوال

    حالا که منظورم روشن شده بزارید سوالم رو یجور دیگه بپرسم.
    یه ترد به نام main ایجاد میکنیم و این thread قراره دو thread دیگه به نام t1 و t2 رو داشته باشه و وظیفه اون به پایان رسوندن این دو thread هست. حالا فرض کنید من main رو استارت کردم و بعد از اون t1 و t2 رو استارت میکنم و بلافاصله یه Exception هم throw میکنم. طبق قائده‌ای که هست. وقتی که main قبل از به پایان رسوندن وظیفه خودش میمیره پس نباید دو thread .ة t1 و t2 به پایان برسن و برنامه باید بسته بشه مگه اینکه من اشتباه بکنم یه قانون خاصی توی جاوا باشه که من ازش خبر نداشته باشم. لطفا اگه قانون خاصی یا چیزی هست که من ازش خبر ندارم بهم بگید.

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

    نقل قول: یه مشکل اساسی در مفهوم Thread

    درسته شروعش در thread اصلی انجام میشه ولی پایانش با پایان thread اصلی نیست. اینجوری فرض کنید که با ایجاد هر thread (هر جایی که شروع شده باشه)، همگی در یک لیست قرار میگیرن (در کنار thread اصلی) و هر کدوم جداگانه در حال اجرا هستند و هر کدام جداگانه میتونن terminate بشن. وقتی که این لیست خالی شد برنامه هم بسته خواهد شد.

    تست کردنش هم سادست، میتونید یک ترد درست کنید که چند تا ترد دیگه رو اجرا کنه، همزمان در زمان های مختلف تعداد تردهای درحال اجرا رو بررسی کنید (از Java VisualVM هم میتونید کمک بگیرید که همراه با محیط جاوا روی سیستمتون نصب میشه) و بعضی تردهایی که مثلا ترد دیگری رو اجرا کرده رو terminate کنید با پایان یافتن متد run یا throw exception و ببینید تعدادش به چه صورت خواهد بود.

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

  1. پاسخ: 2
    آخرین پست: چهارشنبه 10 مهر 1392, 12:04 عصر
  2. سوال: یه مشکل اساسی در ساخت dll دارم
    نوشته شده توسط samsami در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 05 شهریور 1390, 15:35 عصر
  3. یه مشکل اساسی در مورد template
    نوشته شده توسط yasi.88 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 4
    آخرین پست: سه شنبه 13 مرداد 1388, 22:27 عصر
  4. یه مشکل اساسی در DBISAM
    نوشته شده توسط nasr در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 8
    آخرین پست: یک شنبه 26 بهمن 1382, 07:11 صبح

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

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

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