다 중 스 레 드 상황 에서 파충류 가 기어 오 른 결과 에 대한 예
12658 단어 JAVA
그러나 이러한 인터페이스 는 정보 에 중복 되 기 때문에 leader 는 우리 에 게 반드시 다시 해 야 한다 고 요구한다. 왜냐하면 데이터 베 이 스 를 변경 하 는 것 은 횟수 제한 이 있 기 때문이다.그래서 며칠 을 만 들 고 나 서 야 이 프로그램 을 썼 다.
먼저 생각 을 쓰 세 요. 우선, JAVA 가 가지 고 있 는 스 레 드 안전 한 집합 을 이용 하여 Concurrent HashMap 은 자동 으로 무 거 운 작업 을 합 니 다.그러나 다 중 스 레 드 상황 에서 스 레 드 동기 화 에 주의해 야 합 니 다. 집합 류 의 스 레 드 안전 은 저장 할 때 만 잠 겨 있 습 니 다. 이것 은 우리 가 조건 판단 을 할 때 도 스 레 드 가 안전 하 다 는 것 을 의미 하지 않 습 니 다. 이것 은 우리 가 동기 화 되 어야 할 코드 블록 에 자 물 쇠 를 채 워 야 합 니 다.
public static ConcurrentHashMap,Integer> hashMap=new ConcurrentHashMap, Integer>();
AtomicInteger integer = new AtomicInteger();
public void process(Page page)
{
if(page.getUrl().toString()=="https://www.toryburch.com/stores-viewal")
{
for (String a : url) {
page.addTargetRequest(a);
}
}
else
{
String shopId = "";
String branchName = "";
StringBuffer address = new StringBuffer();
String crawlUrl = "";
String region = "";
String city = "";
String country = "the United States";
String shopName = "LanCome";
String sourceName = "LanCome";
String phone = "";
String openTime = "";
double lat = 0.0;
double lng = 0.0;
List infoList=page.getHtml().xpath("poi").nodes();
List brandPoiDtos =new ArrayList();
// ,
if(infoList.size()>=1)
{
for(Selectable b:infoList)
{
phone=b.xpath("//phone/text()").toString();
shopId=b.xpath("//uid/text()").toString();
city=b.xpath("//city/text()").toString();
branchName=b.xpath("//name/text()").toString();
lat=Double.parseDouble(b.xpath("//latitude/text()").toString());
lng=Double.parseDouble(b.xpath("//longitude/text()").toString());
// : address1 address2
address=address.append(b.xpath("//address1/text()").toString()).append(b.xpath("//address2/text()").toString());
BrandPoiDto dto = new BrandPoiDto();
dto.setBranchName(branchName);
dto.setAddress(address.toString());
dto.setCrawlUrl(page.getUrl().toString());
dto.setCity(city);
dto.setCountry(country);
dto.setPhone(phone);
dto.setLat(lat);
dto.setLng(lng);
dto.setShopName(shopName);
dto.setSourceName(sourceName);
dto.setShopId(shopId);
synchronized (this)
{
if(hashMap.get(shopId)==null)
{
hashMap.put(shopId,1);
brandPoiDtos.add(dto);
System.out.println(dto);
integer.incrementAndGet();
}
}
//
address.delete(0,address.length());
phone="";
lat=0.0;
lng=0.0;
shopId="";
branchName="";
city="";
}
}
//
System.out.println(" "+integer);
}
코드 는 다음 과 같 습 니 다. 저 는 synchronized 동기 화 된 코드 블록 을 사용 하여 hashMap 에 이 정보 가 있 는 지 판단 합 니 다 (key 는 업 체 uid 이 고 유일한 것 입 니 다). 없 으 면 데 이 터 를 저장 하고 플래그 비트 1 을 설정 합 니 다. 있 으 면 저장 과 인쇄 검증 을 하지 않 습 니 다.동기 화 코드 블록 과 hashmap 를 통 해 여러 스 레 드 로 캡 처 할 때 중복 되 는 데 이 터 를 제거 하 는 문 제 를 해결 하 였 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.