JavaRush /בלוג Java /Random-HE /קטע את השרשור
Pegas
רָמָה
Гродно

קטע את השרשור

פורסם בקבוצה
שרטטתי שתי מחלקות שיורשות מ Runnable. יש להם מילוי פשוט (Thread.sleep and 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)
לאחר שהשגיאה מתרחשת, השרשורים ממשיכים לעבוד ללא הגבלת זמן. אבל אם תסיר 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