【问题标题】:Java Multi-threading producer-consumerJava 多线程生产者-消费者
【发布时间】:2020-05-05 09:38:41
【问题描述】:

按照这段代码,如何在发送记录和获取记录之间实现多线程。

public class Test_ProducerConsumer {  

    // Main method
    public static void main(String[] args) {

        // Send records
        for(int i=0; i<10; i++) {
            kafka_io.send_records(sendtopic, "test_key", "test_value" + String.valueOf(i));         
        }

        // Get records
        try {
            kafka_io.get_records(gettopic, 100000);
        } catch (JSONException e) {
            e.printStackTrace();
        } 
    }
}

【问题讨论】:

    标签: java multithreading producer-consumer


    【解决方案1】:

    您可以使用BlockingQueue

    在接收项目方面,您可以阻塞线程直到有新项目到来,而对于任何其他线程,您可以添加项目并通知正在接收项目的线程。

    // Inside a class
    public static void main(String[] args) {
        Runnable r = Consumer()
        Thread t = Thread(r)
        t.start()
    
        // Send records
        for(int i=0; i<10; i++) {
            r.queue.add(DataWrapper(...));         
        }
    }
    
    class Consumer implements Runnable {
        BlockingQueue<DataWrapper> queue = BlockingQueue();
        @Override
        public void run() {
            while(true) {
                DataWrapper data = queue.take();
                // use data here
            }
        }
    }
    
    class DataWrapper {
        String dataString;   // these are your variables change as you want
        int dataInt;
    }
    

    【讨论】:

    • 由于变量被称为kafka_io,因此可能已经有一个消息队列。
    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多