gpt4 book ai didi

java - 在方法内调用 runnable 并传递对象

转载 作者:行者123 更新时间:2023-12-01 11:24:50 25 4
gpt4 key购买 nike

我正在尝试调用一个可运行线程,将项目放入 LinkedBlockingList 中。我现在面临的问题是我无法运行内部方法。只有外部方法正在运行。我知道我必须在下面的评论中添加几行代码,但我真的一无所知。

public void prod(TwitterObj obj) {
System.out.println("Prod Outer");
class Producer implements Runnable {

TwitterObj obj;
@Override
public void run() {
try {
queue.put(obj);
System.out.println("Put OBJ into queue: " + obj.getMsg());
++i;
} catch (InterruptedException e) {
e.printStackTrace();
}
};

//invoke thread
}}

正在显示“Prod Outer”消息,但内部类根本没有运行。如有任何反馈,我们将不胜感激!

编辑1:

这是我的代码,我监听自己的 Twitter 流并将值添加到对象中

    public void onStatus(twitter4j.Status status) {
System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText() + " - " + status.getCreatedAt());

obj.setMsg(status.getText());
obj.setDateTime(String.valueOf(status.getCreatedAt()));
obj.setId((int) status.getId());
prod(obj);
}

最佳答案

如果您想知道如何将 TwitterObj 传递到您的 Runnable,请参阅以下操作方法。

class Producer implements Runnable {
private TwitterObj obj;

public Producer(TwitterObj obj) {
this.obj = obj;
}

@Override
public void run() {
try {
queue.put(obj);
System.out.println("Put OBJ into queue: " + obj.getMsg());
++i;
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}

现在您可以按如下方式创建生产者:

TwitterObj twitterObj = ....;

Producer producer = new Producer(twitterObj);
Thread t = new Thread(producer);
t.start();

特别是替换

public void onStatus(twitter4j.Status status) {
System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText() + " - " + status.getCreatedAt());

obj.setMsg(status.getText());
obj.setDateTime(String.valueOf(status.getCreatedAt()));
obj.setId((int) status.getId());
prod(obj);
}

public void onStatus(twitter4j.Status status) {
System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText() + " - " + status.getCreatedAt());

obj.setMsg(status.getText());
obj.setDateTime(String.valueOf(status.getCreatedAt()));
obj.setId((int) status.getId());

// prod(obj); removed and replaced with the 3 lines below
Producer producer = new Producer(twitterObj);
Thread t = new Thread(producer);
t.start();
}

关于java - 在方法内调用 runnable 并传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com