본문 바로가기

IT일반과목/java

쓰레드 예제

개표율로하는걸 만들어보았다.


package jongkyu.threadexam;


import java.util.Random;


public class ThreadExam implements Runnable {

int num=100;//100프로 투표율

int sum=0;//몇프로 진행되었는지

Random r = new Random();//개표진행하는속도


@Override

public void run() {

// TODO Auto-generated method stub


StringBuffer sb = new StringBuffer();

//sb에 버퍼추가

while(true) {

sum=sum+r.nextInt(10);

//랜덤발생한걸 더한다.

sb.delete(0, sb.toString().length());

//처음엔 *이 0이니 초기화시킨다.

if(sum>=num) {

sum=100;

for(int i=0; i<sum; i++) {

sb.append('*');

}

System.out.println(Thread.currentThread().getName()+"개표율 : "+sum+"\t : "+ sb);

break;

}else {

for(int i=0; i<sum;i++) {

sb.append('*');

}

System.out.println(Thread.currentThread().getName()+"개표율 : "+sum+"\t : "+ sb);


}

try {

Thread.sleep(200);

} catch (Exception e) {

// TODO: handle exception

}



}

}


}


--------------------------------------------------------------------------------------------------------------------
package jongkyu.run;

import jongkyu.threadexam.ThreadExam;

public class Run {
public static void main(String[] args) {
ThreadExam v1 = new ThreadExam();
ThreadExam v2 = new ThreadExam();
ThreadExam v3 = new ThreadExam();
Thread lo1 = new Thread(v1,"Lo1");
Thread lo2 = new Thread(v2,"Lo2");
Thread lo3 = new Thread(v3,"Lo3");
lo1.start();
lo2.start();
lo3.start();
}
}


=================================================================================
이태까지한거를 보면 같이 실행이 된건데 그럴경우 식당에서 사람들이 같이 식사를 하고있는데 그자리에 끼는 형식이된다.
이걸 방지하기 위한게 synchronized이다.
run()메소드에 public synchronized void run()을 해줄경우 쓰레드여도 하나의 쓰레드가 끝난후다음께 실행이 된다.

Synchronized의 사전적 의미는 통합, 동시 정도의 의미 입니다.


'IT일반과목 > java' 카테고리의 다른 글

자바 콜렉션(수업)-3  (0) 2018.08.06
자바 콜렉션(수업)-2  (0) 2018.08.06
쓰레드-2  (0) 2018.08.05
쓰레드-1  (0) 2018.08.05
자바 제너릭 다형성  (0) 2018.08.03