MyService 클래스의 execute 메소드를 호출하는 Client 클래스가 있습니다. 이 메서드는 차례로 InsertDAO 클래스를 호출합니다. 이 InsertDAO에는 인스턴스 변수가있는 상태가 있습니다. 이것은 MyService 클래스의 execute 메소드에서만 호출됩니다. 하나는 직접 InsertDAO 클래스를 호출 할 수 없습니다.여러 스레드가 InsertDAO에 입력 할 수 있습니까?
스레드를 만들지는 않지만 응용 프로그램 서버는 클라이언트 클래스에서 스레드를 만들 수 있습니다. 자, 이것이 InsertDAO 클래스에 어떤 영향을 미치는지 이해하고 싶습니다.
- 여러 스레드가 동시에 InsertDAO의 개체에 액세스 할 수 있습니까? - yes/no
- 스레드가 Client 클래스에서 생성되면 MyService 클래스의 동일한 인스턴스가 Client의 모든 스레드에 제공됩니다. 그런 다음 모든 스레드는 MyService의 "execute"메소드를 호출해야합니다. 이것은 모든 스레드가 자신의 InsertDAO 인스턴스를 가지고 있음을 의미합니다 (MyService 클래스의 execute 메소드 내에 InsertDAO 객체를 생성 중입니다). 그렇다면 여러 스레드가 동시에 InsertDAO에 들어갈 수 없습니다. 내 이해가 맞습니까?
- 여러 스레드가 MyService.execute()에 어떻게 입력 할 수 있습니까?
- 어떻게 여러 스레드가 InsertDAO 클래스에 입력 할 수 있습니까? - 이것이 사실이라면 약간의 설명.
- 어떻게 성능에 영향을 미치지 않고 threadsafe를 만들 수 있습니까?
전문가에게이 점에 대해 의견을 나누십시오. 아래는 제 코드입니다.
//code starts here
public class Client{
public void performExecution(){
InvoiceVO createInvoiceVO = new InvoiceVO();
MyService service = mew MyService();
createInvoiceVO = service.execute(createInvoiceVO);
//retrieve successful/failure information from createInvoiceVO
}
}
public class MyService{
public InvoiceVO execute(InvoiceVO createInvoiceVO){
InsertDAO insertDAO = new InsertDAO();
insertDAO.process(createInvoiceVO);
}
}
public class InsertDAO{
private List<LineItem> lineItemsList = new ArrayList<LineItem>();
private List<TaxVO> taxVOList = new ArrayList<TaxVO>();
private Connection connection = null;
public InvoiceVO process(InvoiceVO createInvoiceVO){
this.lineItemsList = createInvoiceVO.getLineItemsList();
this.taxVOList = createInvoiceVO.getTaxVOList();
connection = getConnection();
//insert tax vo objects
insertTaxVOObjects(taxVOList);
//insert line items
insertLineItems(this.lineItemsList);
//commit operation
//close connection
closeConnection();
}
private void insertTaxVOObjects(List<TaxVO> taxVOList){
//code to insert TaxVO objects
}
private void insertLineItems(List<LineItem> lineItemsList){
//code to insert LineItem objects
}
private void getConnection(){
//code to return connection
}
private void closeConnection(){
//code to close connection
}
}
개체를 참조하도록 편집했습니다. – Gana