MethodSyncClass(메소드 동기화)
메소드 동기화: 이번엔 단순 데이터 말고 여러 스레드에 의해 호출되는
"공유 메소드"를 동기화 함으로써 여러 스레드가 동시에 호출 못하도록 lock을 걸어 보도록 하자
[형식]
접근지정자 synchronized 반환타입 메소드명([매개변수]) {
공유 메소드 로직
}
[여러 스레드가 공유하는 메소드를 가진 클래스] (동기화 할 메소드를 가진 클래스)
class MethodSyncClass{
int seed; => 멤버변수
public MethodSyncClass(int seed) { =>인자생성자
this.seed = seed;
}
걍 바로 메소드에 동기화 함!!
synchronized void increase(int inc) {
for(int i=0;i < 10;i++) {
seed += inc; =>초기 변수를 메개변수만큼 증가시키는 메소드
System.out.println(String.format("[스레드명:%s,데이타:%s,i=%s]%n",
Thread.currentThread().getName() , seed ,i));
try {Thread.sleep(1000);}
catch (InterruptedException e) {e.printStackTrace();}
} ///for
} ///메소드
}/////////////////////
[메소드를 공유하는 스레드] ==> 이걸로 메인에서 여러개 찍어낼거
class MethodSyncThread extends Thread{
[멤버변수]
MethodSyncClass msc;
[일정하게 증가시킬 숫자를 저장할 멤버]
int inc;
[인자 생성자]
public MethodSyncThread(MethodSyncClass msc, int inc,String threadName) {
super(threadName);
this.msc = msc;
this.inc = inc;
}
@Override
public void run() {
msc.increase(inc);
}
}
메인
공유 메소드 갖고 있는 클래스, 인스턴스화
MethodSyncClass msc = new MethodSyncClass(10);
두 개의 스레드 생성 (찍어냄)
MethodSyncThread mst1 = new MethodSyncThread(msc, 2, "1st 스레드");
mst1.start();
MethodSyncThread mst2 = new MethodSyncThread(msc, 5, "2nd 스레드");
mst2.start();
==>역시 1st 끝나고 2nd 로 순서대로 출력
'학원 > JAVA' 카테고리의 다른 글
10/12 19-4 키보드로 입력 받는 경우 (0) | 2022.10.12 |
---|---|
10/12 19-3 io 들어가기 (0) | 2022.10.12 |
10/12 19-1 DataSyncThread(데이터 동기화) (0) | 2022.10.12 |
10/11 18-8 ThreadStop (0) | 2022.10.11 |
10/11 18-7 RunnableApp (0) | 2022.10.11 |