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());
}
}
}