T15_SyncThreadTest
public class T15_SyncThreadTest {
public static void main(String[] args) {
ShareObject sObj = new ShareObject(); // 공유 객체 만들기
WorkerThread th1 = new WorkerThread("1번쓰레드", sObj);
WorkerThread th2 = new WorkerThread("2번쓰레드", sObj);
th1.start();
th2.start();
}
}
class ShareObject {
private int sum = 0;
//동기화 하는 방법1 :메서드 자체에 동기화 처리하기
//public synchronized void add()
public void add() { // synchronized => 1번 작업끝날때까지 기다렸다가 2번 완료(콘솔창)
// 위치2 => synchronized public void add()
for(int i=0; i<1000000000; i++) {} //동기화 처리 전까지의 시간벌기용
//동기화 하는 방법2 : synchronized 동기화 블럭으로 설정하기
synchronized (this) { // (10,20,30...220)결과만 순서대로
int n = sum;
n += 10; //10증가
sum = n;
System.out.println(Thread.currentThread().getName()+"합계 : "+sum);
// currentThread() -> 현재 돌고 있는 스레드(ShareObject)dml 객체 출력
}
}
}
작업을 수행하는 쓰레드 클래스
class WorkerThread extends Thread{
ShareObject sObj;
public WorkerThread(String name, ShareObject sObj) {
super(name);
this.sObj=sObj;
}
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
sObj.add();
}
}
}