Java 使用多线程读取信息

Java 使用多线程读取信息,java,multithreading,sockets,threadpool,batch-processing,Java,Multithreading,Sockets,Threadpool,Batch Processing,我有下一个场景: 服务器从套接字发送大量信息,因此我需要读取这些信息并进行验证。其思想是使用20个线程和批处理,每次批处理大小为20时,线程必须将信息发送到数据库,并保持从套接字读取,等待更多信息 我不知道这样做的最佳方式是什么,我在想: 创建一个将读取信息的套接字 创建一个执行器(Executors.newFixedThreadPool(20))并验证de信息,将每一行添加到列表中,当大小为20时,执行将向数据库发送信息的可运行类 提前感谢您的帮助。您不想用一大堆线程来完成此操作。最好使用只有

我有下一个场景:

  • 服务器从套接字发送大量信息,因此我需要读取这些信息并进行验证。其思想是使用20个线程和批处理,每次批处理大小为20时,线程必须将信息发送到数据库,并保持从套接字读取,等待更多信息
  • 我不知道这样做的最佳方式是什么,我在想:

  • 创建一个将读取信息的套接字
  • 创建一个执行器(
    Executors.newFixedThreadPool(20)
    )并验证de信息,将每一行添加到列表中,当大小为20时,执行将向数据库发送信息的可运行类

  • 提前感谢您的帮助。

    您不想用一大堆线程来完成此操作。最好使用只有两个线程的生产者-消费者模型

    生产者线程从套接字中读取记录并将其放在队列中。它所做的就是:读取记录、添加到队列、读取下一条记录。起泡,冲洗,重复

    使用者线程从队列中读取记录,对其进行验证,然后将其写入数据库。如果您希望对项目进行批处理,以便一次向数据库写入20条记录,那么您可以让消费者将记录添加到列表中,当列表达到20条时,执行数据库更新

    您可能希望在生产者-消费者程序中查找有关使用Java
    BlockingQueue
    的信息

    你说过你一天可以从插座上收到一百万张唱片。每秒只有12条记录。除非您的验证是处理器密集型的,否则一个线程可能每秒可以处理1200条记录


    在任何情况下,您的主要瓶颈将是数据库更新,这可能不会从多个线程中受益。

    您不希望用一大堆线程来实现这一点。最好使用只有两个线程的生产者-消费者模型

    生产者线程从套接字中读取记录并将其放在队列中。它所做的就是:读取记录、添加到队列、读取下一条记录。起泡,冲洗,重复

    使用者线程从队列中读取记录,对其进行验证,然后将其写入数据库。如果您希望对项目进行批处理,以便一次向数据库写入20条记录,那么您可以让消费者将记录添加到列表中,当列表达到20条时,执行数据库更新

    您可能希望在生产者-消费者程序中查找有关使用Java
    BlockingQueue
    的信息

    你说过你一天可以从插座上收到一百万张唱片。每秒只有12条记录。除非您的验证是处理器密集型的,否则一个线程可能每秒可以处理1200条记录


    在任何情况下,您的主要瓶颈将是数据库更新,这可能不会从多个线程中受益。

    您不希望用一大堆线程来实现这一点。最好使用只有两个线程的生产者-消费者模型

    生产者线程从套接字中读取记录并将其放在队列中。它所做的就是:读取记录、添加到队列、读取下一条记录。起泡,冲洗,重复

    使用者线程从队列中读取记录,对其进行验证,然后将其写入数据库。如果您希望对项目进行批处理,以便一次向数据库写入20条记录,那么您可以让消费者将记录添加到列表中,当列表达到20条时,执行数据库更新

    您可能希望在生产者-消费者程序中查找有关使用Java
    BlockingQueue
    的信息

    你说过你一天可以从插座上收到一百万张唱片。每秒只有12条记录。除非您的验证是处理器密集型的,否则一个线程可能每秒可以处理1200条记录


    在任何情况下,您的主要瓶颈将是数据库更新,这可能不会从多个线程中受益。

    您不希望用一大堆线程来实现这一点。最好使用只有两个线程的生产者-消费者模型

    生产者线程从套接字中读取记录并将其放在队列中。它所做的就是:读取记录、添加到队列、读取下一条记录。起泡,冲洗,重复

    使用者线程从队列中读取记录,对其进行验证,然后将其写入数据库。如果您希望对项目进行批处理,以便一次向数据库写入20条记录,那么您可以让消费者将记录添加到列表中,当列表达到20条时,执行数据库更新

    您可能希望在生产者-消费者程序中查找有关使用Java
    BlockingQueue
    的信息

    你说过你一天可以从插座上收到一百万张唱片。每秒只有12条记录。除非您的验证是处理器密集型的,否则一个线程可能每秒可以处理1200条记录


    在任何情况下,您的主要瓶颈将是数据库更新,这可能不会从多线程中受益。

    我认为使用多线程只会使代码更加复杂。你知道你有一个问题,使用更多的线程是解决方案吗?您进行了哪些测量?每天发送的行数可能为100万,因此使用multhread会更容易,因为它是一个在线系统,信息获取数据库的速度越快,系统就越好。每天一百万行的平均速度不到每秒11.6行。我认为使用多线程只会让代码变得更复杂。你知道你有一个问题,使用更多的线程是解决方案吗?您进行了哪些测量?每天发送的行数可能为100万,因此使用multhread会更容易,因为是在线系统,速度越快