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 원 을 가 져 갔 는데,이때 의 상황 은 틀림없이 잘못된 것 이다.
정확 한 방법 은 바로 나의 조작 이'원자 조작'이 고 조작 이 완성 되 어야 다른 하 나 는 계속 돈 을 찾 을 수 있다 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vector & Matrix스칼라 : 하나의 숫자로만 이루어진 데이터 (크기만 있고 방향이 없는 물리량) 벡터 : 여러 숫자로 이루어진 데이터 레코드. 매트릭스 : 벡터가 여럿인 데이터집합 벡터의 크기는 스칼라배를 통해 표현할 수 있다. *내...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.