JavaRush /Java Blog /Random-TL /Makagambala sa thread
Pegas
Antas
Гродно

Makagambala sa thread

Nai-publish sa grupo
Nag-sketch ako ng dalawang klase na nagmana mula sa Runnable. Mayroon silang simpleng pagpuno (Thread.sleep and sout). Tinitingnan ko ang mga nakakaabala na mga thread gamit interruptedang at isInterrupted. Para sa ilang kadahilanan, ang pagkaantala ay hindi nangyayari, ngunit ang pagpapatupad ng programa ay napupunta sa isang loop at ang isang error ay nangyayari: Прерывания работы нити (interrupte thread) - 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)
Matapos mangyari ang error, patuloy na gumagana ang mga thread nang walang katiyakan. Ngunit kung aalisin mo Runnableang tawag mula sa mga klase na minana mula sa Thread.sleep, kung gayon ang programa ay tumatakbo nang normal. Ano ang problema, bakit nangyayari ang error at bakit hindi natapos ang programa? dito 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();
    }
}
Unang baitang:
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");
        }
    }
}
Pangalawang klase:
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");
        }
    }
}
Salamat sa iyong mga komento sa paksa)
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION