java - 线程没有在此代码中停止,有什么原因吗?

标签 java multithreading

为什么在这段代码中消费者线程完成后,生产者线程没有被中断,也就是说它的流程没有停止?

class buffer{
    int value;
    public void consume()
    { 
        System.out.println(value+" is consumed");

    }
    public  void produce(int x)
    {

        value=x;
        System.out.println(value+" is produced");


    }


}
class producer extends Thread
{
    buffer x;

    public producer(buffer x)
    {
        this.x=x;
    }
    public void run()
    {
        for(int i=0;i<15;i++)
        {
            x.produce(i);

        }

    }
}
class consumer extends Thread
{
    buffer x;
    producer y;

    public consumer(buffer x,producer y) {
        super();
        this.x = x;
        this.y=y;
    }

    public void run()
    {
        for(int i=0;i<10;i++)
        {
            x.consume();
        }
        y.interrupt();
    }
}
class tester
{
    public static void main(String[] args) {

        buffer x=new buffer();
        producer z=new producer(x);
        consumer y=new consumer(x,z);
        y.start();
        z.start();
    }   
}

最佳答案

作为Java tutorial on Thread interruption这里指出

It's up to the programmer to decide exactly how a thread responds to an interrupt, but it is very common for the thread to terminate.

您没有专门执行任何操作来处理中断,因此当您调用时不会发生任何事情

y.interrupt();

关于java - 线程没有在此代码中停止,有什么原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22387608/

相关文章:

java - Jersey RESTful Web 服务 gradle 设置

java - Solr 管理页面未加载

java - java中使用多线程解析xml并写入txt文件

Python 多处理 : knowing the thread/CPU number

iphone - 使用 NSOperation 进行线程创建了太多对象

java - 线程 "main"中出现异常错误,我需要输入一条消息

java - 使用proguard android的数组序列化异常

Java 并使用 super 跳过一个级别

C++ winapi-单击按钮上的新线程导致 fatal error

asp.net-mvc - ASP.NET MVC 中未调用 WebClient 异步回调