我有一个多用户应用程序,包括一个flex客户端和blazeds / Spring / java后端 - 我有主要元素工作正常,即。向目的地发送消息,消费和生产。 Flex客户端能够从此类发送和检索字符串没问题。我想要做的是让2个客户端访问相同的变量..在这个粗略的样本中,我从每个swf发送一个guid,我追加到字符串_players服务器端。当我启动Swf A时,它会像Swf B一样收回它的guid。然后Swf A接收来自Swf B的guid,但是Swf B没有接收到Swf A.顺便说一句,这是刚刚启动两次的swf代码每个在不同的浏览器中。
任何人都可以看到我出错的地方或可能是更好的解决方案吗?
public class GameFeed {
private static GaneFeedThread thread;
private final MessageTemplate template;
public GameFeed(MessageTemplate template) {
this.template = template;
}
public void start() {
if (thread == null) {
thread = new GaneFeedThread(this.template);
thread.start();
}
}
public void stop() {
thread.running = false;
thread = null;
}
public static class GaneFeedThread extends Thread {
public boolean running = false;
private final MessageTemplate template;
public GaneFeedThread(MessageTemplate template) {
this.template = template;
}
private static String _players;
public void addPlayer(String name)
{
_players += name + ",";
}
while (this.running) {
this.template.send("game-feed", _players);
}
答案 0 :(得分:0)
答案 1 :(得分:0)
您上课时遇到线程问题。它不确定这是否是你问题的原因 - 但它可以。
通过_player
变量,您正在共享数据。但是这个变量不是线程安全的。它有两个主要问题:
要修复它,你必须做两件事:
_players += name + ",";
包裹在同步块中(针对问题1)_players
标记为volatile
(针对问题2)@see http://jeremymanson.blogspot.com/2008/11/what-volatile-means-in-java.html
答案 2 :(得分:0)
一般的其他解决方案是使用线程保存集合而不是字符串,但这导致了其他问题并且不像字符串那样高效。
但是你应该做出决定:在Thread类中使用静态变量来存储像播放器列表这样的共享业务数据。