0
ここでは2つのスレッドを作成しました。それらのレコードをコンソールに送ります。各スレッドに一定量のrdmsレコードを割り当てる方法
それぞれ10個のレコードを含む2つのバッチがあるとします。これらのレコードをコンソールに書き込むために各スレッドに各バッチを割り当てようとしています。
ここでは、スレッド1だけが1000レコード(1バッチあたり10レコード)を読み込んでいますが、スレッド2を作成します。スレッド2を作成すると、並列処理が可能になります。
マイコード:
public class DataRead {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/test";
static final String USER ="root";
static final String PASS ="abc";
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Connection conn = null;
Statement stmt = null;
Class.forName(JDBC_DRIVER);
System.out.println("Connecting to a selected database");
conn = DriverManager.getConnection(DB_URL, USER,PASS);
System.out.println("Connected to Database Successfully !!!");
ResultSet rs = null;
stmt = conn.createStatement();
int maxRecords = 10;
int initialcount =0;
int count =0;
rs = stmt.executeQuery("SELECT COUNT(*) FROM customer");
rs.next();
count = rs.getInt(1);
System.out.println(count);
for(int i=0;i<count/10;i++){
String sql =" SELECT customerId,firstName,lastName FROM customer ORDER BY customerId LIMIT "+initialcount+","+maxRecords;
rs = stmt.executeQuery(sql);
String CustID= null;
String firstName = null;
String lastName = null;
ExecutorService threadExecutor = Executors.newFixedThreadPool(2);
List<CustomerData> list = new ArrayList<CustomerData>();
while(rs.next()){
CustomerData customer = new CustomerData();
customer.setCustID(rs.getString("customerId"));
customer.setFirstName(rs.getString("firstName"));
customer.setLastName(rs.getString("lastName"));
list.add(customer);
}
MyRunnable task1 = new MyRunnable(list);
threadExecutor.execute(task1);
threadExecutor.shutdown();
while(!threadExecutor.isTerminated()){
try {
threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
}
}
initialcount = initialcount + maxRecords;
}
System.out.println("Finished all threads !!!");
}
}
MyRunnable:
public class MyRunnable implements Runnable{
private final List list;
public MyRunnable(List list){
this.list = list;
}
@Override
public void run() {
for(int i=0;i<list.size();i++){
CustomerData cust = (CustomerData) list.get(i);
System.out.println(Thread.currentThread().getName()+" "+"Hello: "+cust.getCustID()+" "+cust.getFirstName()+" "+cust.getLastName());
}
}
}
CustomerData:私は頻繁に従うために使用
public class CustomerData {
private String custID;
private String firstName;
private String lastName;
public String getCustID() {
return custID;
}
public void setCustID(String custID) {
this.custID = custID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
uはここ – dev777
dev777 @上でコードを編集してくださいすることができ、ここでは簡単な擬似です。お試しください – Backtrack
ありがとうございます。私はそれを試してみます – dev777