yoni
[31][Network] Thread SYNCHRONIZED 동기화 처리 본문
java of educational by contents
[31][Network] Thread SYNCHRONIZED 동기화 처리
yoni-1117 2018. 12. 9. 17:44[01] SYNCHRONIZED 동기화 처리 예제
- User: 사용자 정보, 포인트 저장 데이터 클래스
- Act: User 데이터 게임 활동(포인트증가, 포인트 감소)
- Play: Thread를 상속받은 클래스로 게임중인 상황을 구현
- Thread5: 게임 시작 클래스
- public synchronized void increase(){... 메소드에서
'synchronized' 키워드를 제외하고 실행하면 포인트가 일정하게
증가되지 않습니다. 하지만 'synchronized' 키워드를 선언하면
JVM 스레드 스케쥴러에의해 일정하게 포인트가 증가되도록 처리됩니다.
'synchronized' 키워드를 제외하고 실행하면 포인트가 일정하게
증가되지 않습니다. 하지만 'synchronized' 키워드를 선언하면
JVM 스레드 스케쥴러에의해 일정하게 포인트가 증가되도록 처리됩니다.
▷ Thread5.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
package network;
class User{ // 사용자
private String name;
private int point;
public User() {
this.name = "손님";
this.point = 1000;
}
public User(String name, int point) {
this.name = name;
this.point = point;
}
public void setName(String name){ // setter, 설정자
// name의 값이 15자를 넘어가면 15자만 name 필드에 저장하세요.
if (name.length() > 15) {
this.name = name.substring(0, 15);
}else{
this.name = name;
}
}
public void setPoint(int point) {
// 음수이면 0으로 처리
if (point < 0) {
this.point = 0;
} else{
this.point = point;
}
}
public String getName(){ // getter, 접근자
return this.name;
}
public int getPoint(){
return this.point;
}
}
class Act{ // 사용자 데이터 변경
User user;
public Act(User user){
this.user = user;
}
public synchronized void increase() {
int point = user.getPoint();
point++;
user.setPoint(point);
System.out.println(user.getName() + ": " + user.getPoint());
}
public synchronized void decrease() {
int point = user.getPoint();
point--;
user.setPoint(point);
System.out.println(user.getName() + ": " + user.getPoint());
}
}
class Play implements Runnable{ // 동시 처리 기능 지원
private Act act;
public Play(Act act) {
this.act = act;
}
@Override
public void run() {
for (int i=1; i<=5; i++) {
// act.increase();
act.decrease();
}
}
}
public class Thread5 {
public static void main(String[] args) {
User user1 = new User("왕눈이", 15);
Act act = new Act(user1);
Thread thread1 = new Thread(new Play(act));
thread1.start();
Thread thread2 = new Thread(new Play(act));
thread2.start();
Thread thread3 = new Thread(new Play(act));
thread3.start();
}
}
'java of educational by contents' 카테고리의 다른 글
[33][Network] 서버로 전송된 현재 온도를 파일로 저장하고 읽어오는 네트워크 프로그램 제작 (0) | 2018.12.15 |
---|---|
[32][Network] Thread 문자열 전송 기반의 1:1 채팅 서버/클라이언트 (0) | 2018.12.15 |
[30][Network] Thread의 이용 (0) | 2018.12.09 |
[29][Network] Network(네트워크), Socket, ServerSocket (0) | 2018.12.09 |
[28][OOP] 접근 한정자(Access Modifier, 제한자), Final 변수 (0) | 2018.12.09 |
Comments