[英]Getting a variable from a thread to be used by a function
这可能是一个非常简单的问题,但是我尝试过的事情似乎没有用。 我承认我对Java的理解不是很好,这是我第一次使用Threads
,所以就这样,
public MockDataGenerator() {
new Thread() {
@Override
public void run() {
while (true) {
try {
if (bayeuxIds.size() > 0) {
System.out.println("These are the bayeuxIds from new Thread" + bayeuxIds);
List<String> users = new ArrayList<String>();
users.addAll(bayeuxIds);
setData(users);
Collections.shuffle(users);
String bayeuxId = users.get(0);
List<Alert> alerts = generateRandomAlerts(1);
alertsAdded(bayeuxId, alerts);
}
} catch (Throwable t) {
} finally {
try {
int numUsers = bayeuxIds.size();
// plus 1 prevents divide by zero
sleep(30000);
//sleep(r.nextInt(120000 / (numUsers + 1)));
} catch (InterruptedException e) {
}
}
}
}
}.start();
}
public void onMessage(Message message) {
System.out.println("Message recieved from ActiveMQ");
if (message instanceof TextMessage) {
try {
System.out.println("This is the 0th element of usersCopy: " + users.get(0));
String bayeuxId = users.get(0);
String theMsg = ((TextMessage) message).getText();
clientMessanger.sendUpdate(theMsg, bayeuxId);
} catch (Exception e) {
e.printStackTrace();
}
} else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
编辑1:
编辑以显示完整代码,基本上我想要的是将要从线程传递给onMessage函数的用户列表。 我尝试了一些getter和setter方法,但是由于我认为必须使用同步化功能才能正常工作,所以该方法不起作用?
编辑2:
添加了这些功能,但似乎仍无法正确设置变量。 我究竟做错了什么?
String bayeuxIdCopy;
public synchronized void setData(String bayeuxId) {
System.out.println("This is the bayeuxID being set: " + bayeuxId);
bayeuxIdCopy = bayeuxId;
}
public synchronized String getData() {
System.out.println("This is the bayeuxID being returned: " + bayeuxIdCopy);
return bayeuxIdCopy;
}
您可能需要扩展Thread类,并创建一个构造函数,该构造函数采用您事先实例化的对象并将该对象传递给构造函数。 这将允许线程更改对象并能够查看线程外部的更改。 这是最干净的方法。
您也可以在MockDataGenerator
内部和new Thread
语句外部创建对象。 更改之后,也可以在线程外部访问此文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.