Java游戏服务器4

独自空忆成欢 提交于 2021-02-05 10:09:02

1)消息识别器:
    根据消息号,创建一个Builder。

2)javassist:动态修改字节码。==》用于ormtest
    原生反射很慢,那我可以用javaassist来加速

    
3)一些框架没有实现类,是怎么实现出来的。

4)多线程与IO

5)先讲解移动。
    攻击的话,就是涉及到多线程的问题。

6)A和B同时攻击C时,A和B 分别在自己的线程,因此有并发访问安全的问题。


7)多个线程操作同一份数据,数据不一致的问题。解决方案
    (1)加锁 synchronized:
            一个减血的函数暂时没有问题: 


            执行效率不高甚至都不是关键的。

            但是如果有别的函数呢? attkUser(User user); 这种带来了死锁。 互砍造成了死锁!!!
                jps  ==》 得到进程及其对应的pid,,如自己Server的pid。
                jstack 7996  ==》得到死锁信息。

                数据不一致,和死锁。

                减少锁的粒度,可以减少死锁(并非避免死锁)。 但是开发困难,与业务逻辑重合了。

    (2)脏读:多线程操作同一份数据,脏读。
                volatile也不行。它只保证2个线程是可见的。 不能是原子的。

    
    (3)atomic:
         单个操作,能保证线程安全,用cas原语保证,但是十分臃肿! 道具的id,任务的状态。。。对象太大,太臃肿的。
             但是,同时操作a和b,则依然是数据不一致的问题。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!