Multithreading 在Java中的RESTful Web服务上使用线程
我有一个RESTful Web服务的问题,我有一个php客户端,它调用Java中的RESTful服务。在我的RESTful服务中,我有一个Post方法,它执行更新查询来修改一个包含10000条记录的表中的所有行。我想用线程来做这件事。有可能做到吗?。请帮帮我,我是Java的新手。谢谢 好的,我正在我的服务层中执行此操作:Multithreading 在Java中的RESTful Web服务上使用线程,multithreading,web-services,rest,web,Multithreading,Web Services,Rest,Web,我有一个RESTful Web服务的问题,我有一个php客户端,它调用Java中的RESTful服务。在我的RESTful服务中,我有一个Post方法,它执行更新查询来修改一个包含10000条记录的表中的所有行。我想用线程来做这件事。有可能做到吗?。请帮帮我,我是Java的新手。谢谢 好的,我正在我的服务层中执行此操作: for(int i = 0; i < 10; i++) { startRow = i*1000; finalRow = i*1000 + 1000;
for(int i = 0; i < 10; i++)
{
startRow = i*1000;
finalRow = i*1000 + 1000;
Runnable process = new ProcessRecords(startRow , finalRow);
executor.execute(process);
}
// Wait until all threads are finish
while (!executor.isTerminated()) {
}
System.out.println("\n All threads finished");
然后在我的数据层中,我在我的方法“averangeGrade”中这样做:
然后,当我执行我的客户机时,我的服务会对最上面的行进行更新,比如50行,然后返回消息,比如如果所有进程都完成了,我不知道为什么。我想不是等到所有的线程都完成了,但是有代码,那么为什么会发生这种情况呢?。请帮帮我。谢谢。当然可以。
您熟悉Java提供的并发API吗
从高层次的角度来看,您必须编写处理Http POST的代码。在这段代码中,您可以实例化任意数量的线程(线程池),池中的每个线程对要更新的行的子集进行更新。
例如,您可以启动10个线程,每个线程仅对1000行进行更新
此外:
// instantiate the pool
ExecutorService pool=Executors.newFixedThreadPool(poolSize);
// run the task to execute in parallel, specificying the subset of rows
pool.execute(new UpdateHandler(limit,skip));
// below you find a prototype of the async thread task
class Handler implements Runnable {
private final int skip;
private final int limit;
Handler(int limit, int skip) { ... }
public void run() {
// specify the code that runs the query here
}
}
您可以找到文档或
希望这有帮助。当然,这是可能的。
您熟悉Java提供的并发API吗
从高层次的角度来看,您必须编写处理Http POST的代码。在这段代码中,您可以实例化任意数量的线程(线程池),池中的每个线程对要更新的行的子集进行更新。
例如,您可以启动10个线程,每个线程仅对1000行进行更新
此外:
// instantiate the pool
ExecutorService pool=Executors.newFixedThreadPool(poolSize);
// run the task to execute in parallel, specificying the subset of rows
pool.execute(new UpdateHandler(limit,skip));
// below you find a prototype of the async thread task
class Handler implements Runnable {
private final int skip;
private final int limit;
Handler(int limit, int skip) { ... }
public void run() {
// specify the code that runs the query here
}
}
您可以找到文档或
希望这能有所帮助。你能说得更具体一点吗:(1)你所说的“使用线程”到底是什么意思?(2) 你想解决什么问题?仅仅使用线程并不能提高数据库的速度。如果RESTful调用正在更新表中的每一行,那么您可能应该重新组织数据,以便表引用只需要更新一次的外来值。我相信您可能正在寻找执行异步工作来执行这个大型更新。请您澄清一下,以便我们更好地理解您的问题。您需要通过包含代码来展示您迄今为止的研究和尝试。对你当前问题的任何回答只会让你提出更多的问题。我在问题中提供了更多的信息。谢谢大家。你能更具体一点吗:(1)你说的“使用线程”到底是什么意思?(2) 你想解决什么问题?仅仅使用线程并不能提高数据库的速度。如果RESTful调用正在更新表中的每一行,那么您可能应该重新组织数据,以便表引用只需要更新一次的外来值。我相信您可能正在寻找执行异步工作来执行这个大型更新。请您澄清一下,以便我们更好地理解您的问题。您需要通过包含代码来展示您迄今为止的研究和尝试。对你当前问题的任何回答只会让你提出更多的问题。我在问题中提供了更多的信息。谢谢大家。是的,这很有用。谢谢你,但我仍然没有结果,因为我正在工作,但只是第一排,我不知道为什么。我在问题中提供了更多的信息。也许这会有帮助。谢谢。@ErickRodriguezAvarez正如您所发布的,在等待每个线程结束之前,您正在运行线程池关闭。您应该在所有线程完成其工作后运行它。是的,谢谢,您完全正确,但是当我执行线程时,即使我的线程支持完成,while循环也不会完成。你认为为什么会发生这种情况?哪种情况?在条件为isTerminated()的线程或while中?是的,这很有用。谢谢你,但我仍然没有结果,因为我正在工作,但只是第一排,我不知道为什么。我在问题中提供了更多的信息。也许这会有帮助。谢谢。@ErickRodriguezAvarez正如您所发布的,在等待每个线程结束之前,您正在运行线程池关闭。您应该在所有线程完成其工作后运行它。是的,谢谢,您完全正确,但是当我执行线程时,即使我的线程支持完成,while循环也不会完成。你认为为什么会发生这种情况?哪种情况?在条件为isTerminated()的线程或while中?
// instantiate the pool
ExecutorService pool=Executors.newFixedThreadPool(poolSize);
// run the task to execute in parallel, specificying the subset of rows
pool.execute(new UpdateHandler(limit,skip));
// below you find a prototype of the async thread task
class Handler implements Runnable {
private final int skip;
private final int limit;
Handler(int limit, int skip) { ... }
public void run() {
// specify the code that runs the query here
}
}