저는 여전히 파트 타임으로 일하는 학부생입니다. 그래서 나는 항상 일을하는 더 좋은 방법을 알고 자 노력하고 있습니다. 최근에 나는 프로그램의 메인 쓰레드가 어떤 작업을 수행하고 그것이 끝났다고 말하는 레코드를 업데이트 할 "작업"쓰레드 (각 db "작업"레코드)를 생성하는 작업을위한 프로그램을 작성해야했다. 따라서 데이터베이스 연결 개체와 PreparedStatement 개체가 필요하거나 ThreadedTask 개체에서 사용할 수 있습니다.자바 쓰레드의 PreparedStatements 사용이 맞습니까?
이것은 대략 작성한 것으로, 스레드 당 PreparedStatement
개의 오브젝트를 낭비하고 있습니까? 나는
이 스레드 안전한가요 ..
Thread A stmt.setInt(); Thread B stmt.setInt(); Thread A stmt.execute(); Thread B stmt.execute();
A's 버전 execed 결코 극복 ... 경쟁 조건을 만들 수 PreparedStatments
정적을 생각? 항상 똑같은 거대한 쓰레기가 아니라는 것을 PreparedStatement
개체를 만들고 파괴하고 있습니까?
public class ThreadedTask implements runnable {
private final PreparedStatement taskCompleteStmt;
public ThreadedTask() {
//...
taskCompleteStmt = Main.db.prepareStatement(...);
}
public run() {
//...
taskCompleteStmt.executeUpdate();
}
}
public class Main {
public static final db = DriverManager.getConnection(...);
}
연결을 저장하지 마십시오. 필요할 때 연결을 설정하십시오. bettr 성능이 필요한 경우 연결 풀을 사용하십시오. Thilo가 아래에 말했듯이 스레드간에 물건을 공유하지 마십시오. –