2020년 9월 28일 월요일

자바 멀티스레드 메소드, 블록동기화(synchronized), volatile, Atomic쓰레드예제 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)

 

자바 멀티스레드 메소드, 블록동기화(synchronized), volatile, Atomic쓰레드예제 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)


https://youtu.be/cIMooxte59E



http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=770

이미지 썸네일 삭제

자바 멀티스레드 메소드, 블록동기화(synchronized), volatile, Atomic쓰레드예제 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)

자바 멀티스레드 메소드, 블록동기화(synchronized), volatile, Atomic쓰레드예제 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)1. 쓰레드 동기화(synchronization)멀티스레드 환경에서 여러 스레드가 동일한 리소스에 접근하려고 하는 경우 동시성 문제로 인해 예기치 않은 결…

ojc.asia

1. 쓰레드 동기화(synchronization)


멀티스레드 환경에서 여러 스레드가 동일한 리소스에 접근하려고 하는 경우 동시성 문제로 인해 예기치 않은 결과를 생성 할 수 있습니다.

만약 여러 스레드가 동일한 파일을 읽어 쓰려고 하면 여러 스레드가 같은 파일을 동시에 여는 동안 어떤 스레드가 파일을 닫을 수 있기 때문에 데이터가 손상 될 수 있습니다.

따라서 여러 스레드의 작업을 동기화하고 주어진 시점에서 하나의 스레드 만 리소스에 액세스 할 수 있는지 할 수있어야 합니다.

이것은 모니터(Monitor)라는 개념을 사용하여 구현되는데 Java의 각 개체는 스레드가 잠 그거나 잠금 해제 할 수 있는 모니터(Monitor)와 연결됩니다. 한 번에 하나의 스레드 만 모니터에 잠금을 유지할 수 있습니다.

자바 프로그래밍 언어는 synchronized를 사용하여 스레드를 생성하고 작업을 동기화하는 방법을 제공하고 이 블록 내에 공유 리소스를 유지합니다.



2. Synchronized 키워드

synchronized (객체참조변수) { ... 문장 }

객체참조변수가 가리키는 객체에 대하여 lock

문장을 실행

객체참조변수가 가리키는 객체에 대하여 unlock

synchronized 인스턴스 메소드

this 객체에 lock

synchronized 클래스 메쏘드

클래스 자료형을 나타내는 Class 객체에 lock



3. 공유 데이타 이상 접근

200000이 출력되지 않고 가지각색으로 값이 출력됨



class Counter {

//volatile은 값을 원본(메인 메모리)에서 읽으라는 뜻으로 값을 일고 쓰는것에

//대한 동기화이지 increment 메소드와 같은 행위의 동기화는 아니다.

volatile public int count = 0;


public void increment() {

++count;

}

}


public class CounterTest extends Thread {

Counter counter;

public CounterTest(Counter counter) {this.counter = counter;}


public void run() {

for (int i = 0; i < 100000; ++i)

counter.increment();

}



public static void main(String[] args) throws Exception {

Counter counter = new Counter();

CounterTest thread1 = new CounterTest(counter);

CounterTest thread2 = new CounterTest(counter);


thread1.start();thread2.start();

thread1.join(); thread2.join();

System.out.println(counter.count); //200,000이 출력되지 않음

}

}


4. synchronized 키워드 이용


200000 출력됨


class Counter {

volatile public int count = 0;

public void increment() { //public synchronized void increment()

synchronized (this) {

++count;

}

}

}


……

이하 동일



5. Automic 클래스 이용


class Counter

{

static AtomicInteger count = new AtomicInteger(0);


public void increment()

{

count.getAndAdd(1);

}

}

……

이하 동일



#자바스레드,#자바쓰레드,#자바Thread,#자바volatile, #자바Atomic, #자바synchronized, #스레드동기화,#스레드,#volatile,#자바,#JAVA,#자바동영상,#자바강의,#자바교육,#자바강좌,#자바동영상강의,#추천자바강의,#추천자바강좌,#JAVA동영상,#JAVA강의,#JAVA강좌,#JAVA교육,#JAVA,#추천JAVA강의,#추천JAVA교육,#추천JAVA강좌,#자바소스,#자바온라인교육,#자바온라인강의



댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...