最近项目有个需求,需要模拟dhcp,当然只是简单的模拟,就只是一个动态分配IP。现在的做法是把ip池在存放在数据库中(包括一个ip字段和一个isUsed字段),服务器通过多线程来对客户端的请求进行ip分配,所以可以不用通过arp来保证ip冲突。
现在的问题是,服务器通过多线程对客户端的请求进行处理,所以还是要保证多线程下的ip唯一。分配方法是首先查询isUsed字段为0的limit 1 记录,然后在update set isUsed =1;现在的问题就是多线程下面不能保证update之前没有被其他的select
第一个解决方法是对代码段加锁,但是我的Dao不是单例的,每次都要进行new一个。直接对方法加锁肯定不行,对代码段加锁不好选择锁对象。
第二个方法就是先update然后在select,利用存储过程和全局变量;
第三个方法就是笨点了,在表中加一条字段,long型;代码逻辑来控制,首先生成一个new Data().getTIme(),代表唯一串, update的时候一起写入,然后根据这个来select了~~~~好逗逼