Thinking in Java 의 ArrayList,벡터 비교 분석

머리말
                    앞의 글 에서 필 자 는 List 인터페이스 와 그 실현 류 Array List 의 소스 코드 에 대해 관련 분석 을 했 는데 오늘 필 자 는
             Vector 와 Array List 를 비교 합 니 다.동기 화가 무엇 인지,비동기 가 무엇 인지 이해 하 라!벡터 가 어떻게 동기 화 되 었 는 지
       벡터 클래스
                    원본 코드 를 읽 으 면 Vector 류 와 Array List 류 가 공 통 된 부분 이 많다 는 것 을 알 수 있 지만 Vector 는 동기 화 를 실현 했다.
            의 구체 적 인 실현 에 대해 서 는 제시 하지 않 습 니 다.독 자 는 Array List 의 실현 디 테 일 을 참고 하여 이해 할 수 있 습 니 다.Array List 는 동기 화 되 지 않 습 니 다.
           비동기 적 인 거 야.여기 서 동기 화 와 비동기 화 는 도대체 무슨 뜻 입 니까?
      동기 화
                  동기 화 란 동기 화 를 조율 한 다 는 뜻 이다.스 레 드 동기 화 라 는 말 은 다 중 스 레 드 를 바탕 으로 하 는 전제 에서 공유 자원 에 대한 것 이다.
           한 시간 동안 한 스 레 드 만 자원 을 사용 할 수 있 고 다른 스 레 드 는 기다 릴 수 있 습 니 다.이런 방식 은 바로 스 레 드 동기 화 이다.수요 장
           동시 다발 이라는 두 개념 을 구분 하 다.
                 동기 화 개념 을 알 게 된 후에 우 리 는 언제 스 레 드 동기 화 를 사용 해 야 하 는 지 알 게 되 었 다.여러 스 레 드 가 하나의 스 레 드 를 공유 해 야 하 는 지 알 게 되 었 다.
           데 이 터 는 이 상황 에 대해 동기 화 를 사용 해 야 한다.그렇지 않 으 면 데이터 뱅 크 의 더러 운 읽 기,환 독 등 안전 하지 않 은 상황 이 발생 할 수 있다.
           반복 해서 읽 으 면 안 된다.그러나 다 중 스 레 드 에서 원자 조작 에 대해 서 는 동기 화 기술 을 사용 할 필요 가 없다.
      비동기
                 먼저 알 아야 할 것 은 비동기 와 다 중 스 레 드 는 근본적으로 두 가지 개념 이 고 비동기 는 하나의 스 레 드 만 현재 데 이 터 를 방문 하 는 것 이다.
           예 를 들 어 관찰자 모드 는 공유 구역 이 없고 주제 에 변화 가 생 겨 관찰자 에 게 업 데 이 트 를 알 립 니 다.주 제 는 자기가 하고,필요 없어.
           관찰자 가 업 데 이 트 를 마 친 후에 작업 을 진행 합 니 다.
                이 를 통 해 알 수 있 는 것 은 다 중 스 레 드 의 경우 동기 화 는 스 레 드 가 안전 하고 스 레 드 를 통 해 공유 자원 에 대한 접근 입 니 다.
          여러 스 레 드 의 조 화 를 이 루 기 위해 권한 을 제어 합 니 다.반대로 이 보 는 라인 이 안전 하지 않다.
       실례 적 이해
package com.kiritor;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;

public class Test implements Runnable {
    private ArrayList<String> aa= new ArrayList<String>();
    @Override
    public void run() {
        aa.set(0,"Thread");
    }
    public String  get()
    {
        aa.add("ThreadMain");
        System.out.println(aa.get(0).toString());
        Iterator it = aa.iterator();
        return aa.get(0).toString();
    }
    public static void main(String[] args) throws InterruptedException {
        Test test = new Test();
        new Thread(test).start();
      
        //dosomething
        System.out.println(test.get());
        
        
    }
  
    
}


               설명 할 것 은 JVM 의 실제 스케줄 링 상황 이 있 습 니 다.상기 코드 에 이상 이 생 길 수 있 습 니 다.여기 서 제 출력 은?
            ThreadMain
            Thread,ThreadMain 을 처음 읽 고 파일 에 기록 하면 두 번 째 로 읽 습 니 다.
         Thread 가 되 었 습 니 다.제 가 ThreadMain 으로 일 을 하고 있다 면 잘못된 것 입 니 다.
               이것 은 안전 하지 않 은 요 소 를 초래 했다.왜냐하면 내 가 읽 은 데이터 와 실제 데 이 터 는 다 르 기 때문에 이것 은 내 가 돈 을 찾 는 것 과 같다.
           도중에 마침 카드 에 500 원 이 들 어 있 는 것 을 읽 었 고,다른 한 사람 은 마침 이때 200 원 을 가 져 갔 는데,이때 의 상황 은 틀림없이 잘못된 것 이다.
            정확 한 방법 은 바로 나의 조작 이'원자 조작'이 고 조작 이 완성 되 어야 다른 하 나 는 계속 돈 을 찾 을 수 있다 는 것 이다.

좋은 웹페이지 즐겨찾기