我有一个 java 应用程序,其中 15 个线程通过名为 getNext() 的同步方法从包含 11,000 条记录的表中选择一行,线程在选择一行时变得很慢,从而花费了大量时间。每个线程都遵循以下过程:
线程检查是否存在恢复列值设置为 1 的行。
A. 如果存在,则线程获取该行的 id 并使用该 id 选择 id 大于获取 id 的另一行。
B. 否则选择 id 大于 0 的行。
根据上述 1 中描述的步骤的结果收到的最后一行被标记为恢复列设置为 1。
线程获取行数据并对其进行处理。
问题:
- 多线程如何访问同一个表选择另一个线程没有选择的行并且快速?
- 如果任何线程选择的最后一行发生崩溃,如何使线程恢复?