JavaRush /Java blogi /Random-UZ /Tarmoqni uzish
Pegas
Daraja
Гродно

Tarmoqni uzish

Guruhda nashr etilgan
dan meros bo'lgan ikkita sinfni chizdim Runnable. Ular oddiy to'ldirishga ega (Thread.sleep va sout). interruptedMen va dan foydalangan holda mavzularni to'xtatishni ko'rib chiqdim isInterrupted. Ba'zi sabablarga ko'ra, uzilish sodir bo'lmaydi, lekin dasturning bajarilishi tsiklga o'tadi va xatolik yuzaga keladi: Ipni uzish - 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)
Xato sodir bo'lgandan so'ng, iplar cheksiz ishlashni davom ettiradi. Ammo agar siz Runnableqo'ng'iroqni meros qilib olgan sinflardan olib tashlasangiz Thread.sleep, dastur odatdagidek ishlaydi. Muammo nima, nima uchun xatolik yuz beradi va nima uchun dastur tugamaydi? Bu yerga 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();
    }
}
Birinchi sinf:
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");
        }
    }
}
Ikkinchi toifa:
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");
        }
    }
}
Mavzu bo'yicha sharhlaringiz uchun rahmat)
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION