/* 2개의 쓰레드가 코드와 데이터를 공유하는 상황
* synchronized를 적용하여 데이터의 일관성 확보
* 선수지식: 쓰레드의 코드공유, 쓰레드의 이름설정 및 활용, synchronized키워드
* 아래의 소스를 실행해 보면 데이터의 일관성이 유지된다.
* 순차처리가 아닌 병행처리도 정상적으로 되고 있다.
*/
class Code2 implements Runnable{
int i = 0;
public void run(){
String name = null;
while(i<100){
synchronized(this) {
i++;
name = Thread.currentThread().getName();
System.out.println(name+"시작:"+i);
try{
Thread.sleep(30);
}catch(InterruptedException e){}
System.out.println(name+"끝:"+i);
}
try{
Thread.sleep(20);
}catch(InterruptedException e){}
}
}
public static void main(String[] args) {
Code2 code = new Code2();
Thread t1 = new Thread(code);
Thread t2 = new Thread(code);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
}