关于java多线程

假如说有两个线程,一个thread1,一个thread2,thread1负责修改数据(每秒一次),thread2负责查询数据处理(三秒一次),thread2对thread1修改的那条数据查询....
请问?如何保证thread2每次查出来的数据都是最新的、?

阅读 2.2k
4 个回答

粗糙的一个想法就是利用update_time(如果有的话),毕竟你的场景是有一个时间间隔在的。如果线程启动的比较理想是“同时”的,那查询时数据的更新时间应当在当前秒内(容忍毫秒差)。之所以粗糙是因为没有办法保证每次修改数据的耗时情况。两个线程一读一写,不靠锁很难保证数据准确。奥,对,你也没说不能用锁。

将变量设置为 volatile 不就可以了吗?

thread1改完之后推送可以吗,thread2都不需要了。
或者改为生产者-消费者模式,thread2每3秒取一次消息并取时间最晚的

同步锁即可,把查询和修改加上同一个锁,这样在修改的时候无法查询,在查询的时候无法修改,由于查询和修改中间都有较长时间间隔,而操作本身时间又非常短,从体验上是感觉不到任何问题的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题