JAVA/코드

2022_10_31 연습 01 package com.ssc.multithread;

0304호 2022. 10. 31. 17:35
package com.ssc.multithread;

public class MutexMain {

	public static void main(String[] args) {
		//Runnable 인터페이스로부터 상속받은 클래스
		ShareData shareData = new ShareData();
		//스레드 생성
		Thread th1 = new Thread(shareData);
		th1.start();
		Thread th2 = new Thread(shareData);
		th2.start();

		try {
			//30초 대기 - 앞의 작업이 스레드로 동작하기 때문에 작업이 끝날때 까지 대기 하고 결과를 출력
			Thread.sleep(3000);
			System.out.println(shareData.getResult());
		} catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
		}


	}

}​
package com.ssc.multithread;

import java.util.concurrent.locks.ReentrantLock;

//자원을 가지고 연산을 하는 스레드에 사용할 클래스
public class ShareData implements Runnable{
	//연산결과를 저장할 속성
	private int result;
	//연산에 사용할 인덱스
	private int idx;
	
	
	//공유 코드 영역을 설정하기위한 객체
	static final ReentrantLock lock = new ReentrantLock();

	//result의 getter메서드
	public int getResult() {
		return result;
	}


	@Override
	public void run() {
		try {
			for(int i = 0 ; i<10; i++) {
				//자물쇠를 채워서 unlock을 만날때 까지는 이 영역의 자원을 수정할 수 없음
				lock.lock();	
				idx++;
				Thread.sleep(10);
				result += idx;
				lock.unlock();
			}
		} catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
		}	
	}



}