2011-04-23 2 views
1

나는 100 항목이 특정 테이블 열 항목을 업데이 트해야합니다 동적으로 업데이 트가 필요합니다 DB가 있습니다. 기본적으로 모든 100 개 항목DB를 업데이 트하는 자바 멀티 스레드 응용 프로그램

는 디스크 에서 데이터를 수집하고 그들이 while 루프에서 잠금을 얻을 때까지 시도 잠금을 얻을 수있는 DB를/디스크 정보를 얻을 수있는 DB tables.In 순서를 업데이트합니다. 일단 잠금을 얻으면 최신 디스크 정보 만 DB로 업데이트 할 수 있습니다.

본질적으로 위의 작업을 순차적으로 수행하는 다음 페도수 코드가 있습니다. 병렬 작업을 수행 할 수 있도록 다중 스레드 방식으로 실행하려고합니다. 제발 나를 안내해 주시겠습니까? 나는 자바 멀티 스레드 프로그램에 완전히 익숙하지 않습니다.

감사의 말을 전합니다.

while(true) 
{ 

for(int i=0,i<100;i++) 
{ 
    //Get the info from Disk 
    String diskInfo=getDiskInfo(i); 
    //Get the info from DB table 
    String dbInfo=getDBInfo(i); 
    if (! diskInfo.equals(dbInfo)) 
    { 
     //Update DB with diskInfo 
     boolean status=UpdateDB(i); 
    } 
} 

sleep(2000); 

} 
//Get the info from Disk 

public String getDiskInfo() 
{ 
    //Get the disk 
    //lock the disk wait if busy 
    while(true) 
    { 
    //get disk lock 
    sleep(2000); 
    } 
    //fetch data 
    String data = "test"; 
    //unlock disk 
    return data;  

} 

public String getDBInfo() 
{ 
    //Get the DB 
    //lock the DB wait if busy 
    while(true) 
    { 
    //get DB lock 
    sleep(2000); 
    } 
    //fetch data 
    //select data from X; 
    String data = "test"; 
    //unlock disk 
    return data;  

} 

public boolean UpdateDB() 
{ 
    //Get the DB 
    //lock the DB wait if busy 
    while(true) 
    { 
    //get DB lock 
    sleep(2000); 
    } 
    //fetch data 
    if(!getDiskInfo(),equals(getDBInfo()) 
    { 
    //lock the DB wait if busy 
    while(true) 
    { 
    //get DB lock 
    sleep(2000); 
    } 
    status=UpdateDB(); 

    } 
    else 
    { 
     //no update needed 
    status=false; 
    } 
    return status; 

} 

답변

0

이 작업을 수행하는 코드는 작성하지 않습니다. Java 객체를 동기화하거나 데이터베이스 기능을 사용하여 원하는 작업을 수행 할 수 있습니다.

0

최대 하나의 루프 (가장 바깥 쪽 루프)를 원한다는 것을 알 수 있습니다. 멀티 스레드 프로그램은 단일 스레드 프로그램과 유사하게 작동하므로 무한 루프가있는 것이 좋습니다.

첫 번째 루프의 스레드 풀에 작업을 추가하고 나머지 작업을 제거하는 스레드를 확인해야합니다.

0
  1. 멀티 스레딩 개념을 익히십시오.
  2. 그런 다음 Java 다중 스레딩 개념을 배우십시오.
  3. 그런 다음 java 멀티 스레딩 api java.util.concurrent에 대해 알아보십시오.
  4. 그런 다음 java api를 사용하십시오. 가장 적절한 클래스를 사용해야합니다.

멀티 스레딩이 어렵습니다.

sleep() 호출과 inifinite 루프는 멀티 스레딩을 시도 할 때 불쾌한 놀라움을 찾기 때문에 작성하는 것이 좋습니다.

당신의 코드는 멀티 스레딩 코드로 변환하기가 비교적 쉬워야한다고했습니다.

관련 문제