从子线程在主线程上运行代码

时间:2016-10-16 16:17:29

标签: java multithreading networking slick2d

我正在使用Java中的Slick2D制作简单的2人多人游戏。我正在使用java套接字来创建服务器和客户端对象。它们工作正常,但是消息传递系统是不同线程中的句柄(不是阻塞主线程)。一切正常,直到我尝试在" MessageHandler"中运行主类中的代码。 Runnable,它运行在子线程上。子线程没有OpenGL上下文,所以有些东西不起作用。有没有办法在MessageHandler中调用Main类中的方法,以便它将在主线程上执行(也许是一个新的Runnable?)????

1 个答案:

答案 0 :(得分:0)

解决问题的最佳方法可能是使用消息处理线程将消息存储在队列(或其他一些列表对象)中。这样,消息处理线程唯一的工作就是监听消息并存储消息。尝试让消息处理线程修改主线程上的对象可能会导致很多同步问题,如果不是非常小心,我认为对你的案例是不必要的。

主线程应该具有对这些消息也存储的队列的引用。然后你可以运行一个循环(就像你有一个循环来绘制你的游戏),那就是处理这些消息。如果没有要处理的消息,则主线程不执行任何操作,并继续。

同样围绕列表进行同步也是一个好主意,这样就不会同时写入和读取。