基本上我尝试将 runnable 类添加到我自己的任务线程类中,执行这些任务不同的线程,我需要将参数传递给 runnable 对象,但是我在传递字符串时遇到了麻烦,正如编译器所说:
"在封闭范围内定义的局部变量接收器必须是最终的或有效的最终"
String message = networkMessage.getString();
Game.getInstance().addGameTask(new Runnable() {
@Override
public void run() {
Game.getInstance().playerTalk(player.getId(), message);
}
});
我尝试使用 Lambda with Runnable 做一些简单的事情:
Runnable r = () -> Game.getInstance().playerTalk(player.getId(), mode, receiver, channelId, message);
但是编译器会说同样的错误。
在C#中,我想出一些简单的东西:
Game.AddGameTask(() => { Game.PlayerTalk(_player.Id, message, mode, receiver, channelId); });
我可以尝试实现一些简单的事情吗?它的任务应该是游戏服务器,所以我需要添加这些"任务"到外部线程以获得更好的功能和性能。
有什么问题?
答案 0 :(得分:1)
最简单的解决方案是使receiver
变量为final,这意味着一旦设置了它的值,就不能再次设置它。 E.g。
final Receiver receiver = new Receiver();
或者,您可以使用AtomicReference
来保存对象并允许以线程安全的方式进行访问。