JavaRush /وبلاگ جاوا /Random-FA /قطع کردن موضوع
Pegas
مرحله
Гродно

قطع کردن موضوع

در گروه منتشر شد
من دو کلاس را ترسیم کردم که از Runnable. آنها یک پر کردن ساده (Thread.sleep و Sout) دارند. interruptedمن به دنبال قطع کردن موضوعات با استفاده از و بودم isInterrupted. به دلایلی، وقفه رخ نمی دهد، اما اجرای برنامه به یک حلقه می رود و یک خطا رخ می دهد: قطع رشته - 1
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.javarush.test.myExample.example.thread.Producer.run(Producer.java:15)
	at java.lang.Thread.run(Thread.java:745)
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.javarush.test.myExample.example.thread.Consumer.run(Consumer.java:15)
	at java.lang.Thread.run(Thread.java:745)
پس از بروز خطا، thread ها به طور نامحدود به کار خود ادامه می دهند. Runnableاما اگر تماس را از کلاس های به ارث رسیده از حذف کنید Thread.sleep، برنامه به طور معمول اجرا می شود. مشکل چیست، چرا خطا رخ می دهد و چرا برنامه خاتمه نمی یابد؟ اینجا main:
public class Solution
{
    public static void main(String[] args) throws InterruptedException
    {
        Thread thread1 = new Thread(new Producer());
        Thread thread2 = new Thread(new Consumer());

        thread1.start();
        thread2.start();

        Thread.sleep(1500);

        thread1.interrupt();
        thread2.interrupt();
    }
}
کلاس اول:
public class Producer implements Runnable
{
    @Override
    public void run()
    {
        while (!Thread.interrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            System.out.println("Producer");
        }
    }
}
درجه دوم:
public class Consumer implements Runnable
{
    @Override
    public void run()
    {
        while (!Thread.interrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            System.out.println("Consumer");
        }
    }
}
با تشکر از نظرات شما در مورد موضوع)
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION