数据库中录入了一批任务,操作员通过从数据库中取得任务后进行处理。
要求:操作员不能取到相同的任务
      操作员完成一个任务后取得下一个任务,类似竞抢
      完成的任务不能再被操作员取到
      由于工作不久经验欠缺,还没有什么号的思路,有人建议我可以建立一个任务池,先从数据库中取到一批任务,操作员从这个池子里取任务(有点像数据库连接池)
这个任务池是怎么一种机制,是线程池?还是其他的?要注意些什么问题,希望有经验的前辈达人给点建议,先谢谢了

解决方案 »

  1.   

    每条任务加一个字段标记任务状态
    如:flag
    1、flag默认值0,表示正常状态;
    2、当操作员取到某一个任务后,把该任务对应的flag值改成-1;这样操作员每次取任务只取flag值为0的,就可以保证不会出现两个操作员取到相同的任务;
    3、任务完成后,把该任务对应的flag值改成1;同样,操作员每次取任务只取flag值为0的,就可以保证完成的任务不会再被操作员取到。
      

  2.   


    如果真有那么多管理员同时工作的话,可以考虑在任务录入数据库时直接把任务平均分配给各个管理员,这样每个管理员在取任务时,直接取自己的任务就可以了或者像管理session一样,用全局变量存储当前正在被操作的任务的id,管理员操作完任务则把任务id从全局变量中清除,当管理员取到任务后用任务的id与全局变量中存储的任务id进行比较,即可得出当前取到的任务是否有其他管理员正在操作,如果已经有了,则重新取数据;如果全局中没有,则管理员继续操作并把任务id写到全局变量中。
      

  3.   

    从数据库中直接拿是没有问题的,只要你先更新字段,根据更新字段返回的值(java的jdbc可以得到是否有记录被更新的),然后处理,处理完成后,在更新成完成就可以了,这个是数据库中乐观锁的实现原理,不会拿到脏数据的。