DB접근하는 클래스가 TimeDB 이렇게 있고

 

여기에

 

public synchronized void getData(.....){

 

   SQLiteDatabase db = mDBOpenHelper.getReadableDatabase( );

  Cursor c = db.rawQuery(.....);

   ......

   this.funtion_a(db);

   ......

   db.close( );

}

 

public synchronized ... funtion_a(SQLiteDatabase db){

    ....

}

 

이런 식으로 메소드가 있습니다.

 

이걸 리스트에서 쓰레드로 getData 해서 불러오는데

 

데이터를 동적으로 불러오는 리스트죠. 링크드리스트 처럼.

 

리스트를 스크롤 하면 새 항목이 추가될 때 쓰레드에서 데이터를 받아오고 받아왔다고 알려오면 화면에 업데이트 하는 건데요.

 

리스트가 한꺼번에 여러개 로딩되려고 하면 가끔씩 에러가 납니다..

 

뭐 에러가 참 다양한데요..

 

db가 이미 닫혔다. db가 열려있지 않다.

 

라는 에러가 가장 많이 뜨네요.

 

synchronized 가 붙은 메소드는 같은 객체일 경우 어떤 쓰레드가 접근하면 다른 쓰레드가 접근할 수 없다고 들었는데요.

 

혹시 위에 코드에서 getData 내부에서 funtion_a 라는 메소드로 들어가면 대기중인 다른 메소드가 getData 메소드로 들어올 수 있나요?

 

TimeDB 객체 자체는 전역? 비슷하게 되서 DB결과 자체는 모든 쓰레드가 같은 TimeDB 객체에서 얻어오는 구조입니다만..

 

그럼 접근을 못 하니까 에러도 없어야 될텐데...

 

이미 닫혔다, 열려있지 않다, 는 건.. 어떤 쓰레드가 getData 메소드에 중간쯤을 실행중인데 두번째 쓰레드가 이 쓰레드에 접근 성공했다는 거... 맞죠?

 

그래서...음

 

쓰레드를 쓰기는 하되

 

읽어들일 리스트 항목이 여러개라고 해도 순서를 정해서 순서대로 하나씩 읽도록 하는 편이 나으려나요.