在java中调用带有run方法的方法进行多线程处理

时间:2017-08-23 16:30:30

标签: java multithreading

我正在尝试使用阻塞队列中的数据。需要在run方法中实现consume方法。 我有以下代码需要在run方法

中实现
 @Override
public String consume(String lastSourceOffset, int maxBatchSize, BatchMaker batchMaker) throws StageException {
        long nextSourceOffset = 0;
        if (lastSourceOffset != null) {
            nextSourceOffset = Long.parseLong(lastSourceOffset);
        }
        if (queue.size() != 0) {
                Record record = getContext().createRecord("some-id::" + nextSourceOffset);
                Map<String, Field> map = new HashMap<>();
                try {
                    map.put("fieldName", Field.create(queue.take()));
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                record.set(Field.create(map));
                batchMaker.addRecord(record);
                ++nextSourceOffset;

            }


        return String.valueOf(nextSourceOffset);
    }

我试图让上面的方法在下面运行&#34;运行方法&#34;

@Override
    public void run() {

        // TODO Auto-generated method stub

    }

我有什么方法可以称之为。

1 个答案:

答案 0 :(得分:2)

你可以创建一个类构造函数来接受如下参数:

public class ConsumeRunner implements Runnable{

        String lastSourceOffset;
        int maxBatchSize;
        BatchMaker batchMaker;
        public ConsumeRunner(String lastSourceOffset, int maxBatchSize, BatchMaker batchMaker)
        {
            this.lastSourceOffset=lastSourceOffset;
            this.maxBatchSize=maxBatchSize;
            this.batchMaker=batchMaker;
        }

        @Override
        public void run() {
            consume(lastSourceOffset,  maxBatchSize, batchMaker);

        }
    }

您正常构造线程,除了no-args构造函数之外,您使用新的自定义线程。否则运行它是一样的。