저는 Java에서 다중 스레드 처리에 대해 새로운 것이므로 이제는 기존 클래스를 사용하여 다중 스레드 모듈을 구현해야합니다. 나는 단일 스레드와 다중 스레드 실행간에 다른 결과를 얻고있다.스레드 안전성에 대한 의문점
public class Worker implements Runnable{
final private int minIndex; // first index, inclusive
final private int maxIndex; // last index, exclusive
final private MyDTO dto;
private MyService myService;
public Worker(MyDTO dto) {
this.minIndex = dto.getMinIndex();
this.maxIndex = dto.getMaxIndex();
this.dto = dto;
myService = new MyService();
}
public void run() {
int countReg = 0;
if(!initErrors){
try {
Connection conn = ConnectionFactory.getConnection();
for(int i = minIndex ; i<maxIndex; i++){
myService.executeCalculation(dto,conn);
countReg++;
}
conn.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public class MyService{
//It has some method to get object from the database
public void executeCalculation(MyDTO dto,Connection conn) {
//I do some actions and
RegolaDAO regolaDAO = new RegolaDAO(conn);
MyObject obj = new MyObject(conn);
// I use obj durin the calculation
}
}
}
public class MyObject{
Connection conn;
public MyObject (Connection conn){
super();
this.conn = conn;
}
}
내 서비스는 상태 비 객체이며, MyObject를이 상태 형 객체이며,이 문제를 만들 수있는 동안 다음 문제를 확인해야하지 않습니다 내 주요 의문은 다음과 같다. 내 계산에 새로운 키워드를 사용한 이후의 주요 의심점 MyObject obj = new MyObject(); 이것은 경쟁 조건을 방지하는 데 도움이됩니다.
MyObject는 안전합니까? 구현에 대한 제안 사항을 제공해 줄 수 있습니까?
내 질문이 업데이트되었습니다. MyObject에 대해 어떻게 생각하십니까? – Skizzo
@Skizzo 스레드간에 공유되는 것이 없으면 (코드에서 알 수 있듯이) '다중 스레드 문제가 발생합니다. 문제가있는 경우, 그것이 무엇인지 모를지라도, 어떤 것이 공유되고 있음을 의미합니다. –
당신이 말한 곳에서 당신이 의도 한 것은 무엇입니까 * 당신의 dto가 쓰레드들 사이에 공유되어있는 것으로 보입니다, 나는 그것도 읽기 전용인지 점검 할 것입니다. 어떻게 할 수 있습니까? – Skizzo