Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程池和连接池,需要帮助了解它们如何在Java中工作_Java_Multithreading_Javafx_Threadpool_Connection Pooling - Fatal编程技术网

线程池和连接池,需要帮助了解它们如何在Java中工作

线程池和连接池,需要帮助了解它们如何在Java中工作,java,multithreading,javafx,threadpool,connection-pooling,Java,Multithreading,Javafx,Threadpool,Connection Pooling,所以基本上我是一家大公司的实习生。我必须做一个小java程序(javaFX),它获取csv列表并更新我们的数据库(3台服务器6个数据库)。该文件有超过700.000个条目,我们的服务器可以支持50个连接。所以我对连接池的限制是50个,我应该使用不超过200个线程。这是我从首席程序员那里得到的信息 我启动了我的项目,创建了我的对象,并从csv文件中创建了一个可观察列表(假设其中只有Id和价格,其他字段无论如何都是无关的)。我所在的堆栈是线程池和连接池。我怎样才能两者兼得?在我的新手头脑中,我想我会

所以基本上我是一家大公司的实习生。我必须做一个小java程序(javaFX),它获取csv列表并更新我们的数据库(3台服务器6个数据库)。该文件有超过700.000个条目,我们的服务器可以支持50个连接。所以我对连接池的限制是50个,我应该使用不超过200个线程。这是我从首席程序员那里得到的信息


我启动了我的项目,创建了我的对象,并从csv文件中创建了一个可观察列表(假设其中只有Id和价格,其他字段无论如何都是无关的)。我所在的堆栈是线程池和连接池。我怎样才能两者兼得?在我的新手头脑中,我想我会做一个循环,让200个线程执行语句,但是我必须使用50个连接,所以我应该做50个线程,从池中打开50个连接并执行更新?如果有人给我举个例子,让我了解mysql连接线程是如何工作的,我会非常高兴,因为我的脑袋快爆炸了

我不理解在读取CSV文件(IO)并将数据加载到数据库时使用多线程的必要性。没有它,你可以做到这一点。 在Spring中(假设JavaFX支持Spring),您可以将数据块作为ByTestStream读取,并将数据批量加载到数据库中(例如,每5000行)。下面是一个示例代码段

import org.springframework.data.repository.CrudRepository;

//import org.springframework.data.jpa.repository.JpaRepository;
//import org.springframework.data.repository.CrudRepository;

import com.billing.portal.notification.entities.Notification;

public interface NotifyRepo extends CrudRepository<Notification, Integer> {

}
import org.springframework.data.repository.crudepository;
//导入org.springframework.data.jpa.repository.JpaRepository;
//导入org.springframework.data.repository.crudepository;
导入com.billing.portal.notification.entities.notification;
公共接口NotifyRepo扩展了crudepository{
}
下面的实施代码

@Autowired
NotifyRepo notify;

int total=notifyRecords.size();
System.out.println("Total records are  "+total);
int limit=5000;
int start=0;
int rem=0;
boolean check=true;
if(total>5000) {
    rem = total-limit;
    while(check) {
            System.out.println("Start ::: "+start
                    +" limit ::: "+limit
                    +" rem ::: "+rem
                     );
            notifyRecords1 = notifyRecords.subList(start,limit);
            System.out.println("********************* Batch Insert Started from "+start+" to "+limit +"************************");
            notify.saveAll(notifyRecords1);
            System.out.println("Batch Insert Completed");
            if(limit==total) {
                break;
            }
            start=limit;
            rem=rem-5000;
            limit+=5000;    
            if(rem<=0) {
                limit=total;
            }

        }

    Batchload load = new Batchload();
    loadRepo.save(load);                    

    }else {

        System.out.println("Batch insert started, total less than "+limit);
        notify.saveAll(notifyRecords);
}
@Autowired
NotifyRepo notify;
int total=notifyRecords.size();
System.out.println(“总记录为”+总记录);
整数极限=5000;
int start=0;
int-rem=0;
布尔检查=真;
如果(总数>5000){
rem=总限额;
while(检查){
System.out.println(“开始::”+Start
+“限制::”+限制
+“rem::”+rem
);
notifyRecords1=notifyRecords.subList(开始、限制);
System.out.println(“**********************批量插入从“+开始+”开始到“+限制+”*******************”);
notify.saveAll(notifyRecords1);
System.out.println(“批量插入完成”);
如果(限制==总计){
打破
}
开始=限制;
rem=rem-5000;
上限+=5000;

if(remEach线程应使用一个连接。因此,如果连接数的限制为50,则意味着您不能使用超过50个线程…来与数据库通信。请注意,尝试在多个线程之间共享JDBC连接对象是不安全的。JDBC对象(
连接
语句
结果集
等)通常不是线程安全的。还不清楚尝试运行大量并行线程是否是一个好主意。更好的选择可能是将多个更新组合到一个更新语句中或使用批处理。(我有点惊讶,首席程序员建议您在并行化上“全力以赴…”“获取csv列表”这是在内存中还是在磁盘上?你是用一个输入文件来更新三个不同的数据库吗?是的,这是一个文件来更新三个不同服务器中的6个数据库。他没有向我解释清楚,所以我猜他希望程序尽可能快地更新三个不同服务器中的6个数据库。所以在三个服务器之间分配线程s和6个数据库。我正在尝试按照您的建议使用批处理。每5000行将执行一次。他没有向我解释清楚,所以我猜作为实习生需要学习的是问,问,问,问,问你的领导(和同事),而要忘记的是猜测:)