import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class T11DisplayCharacterTest {
/*
3개(명)의 스레드가 각각 알파벳 대문자를 출력하는데...
출력을 끝낸 순서대로 결과를 출력하는 프로그램 작성하기
*/
static int CURR_RANK = 1; //현재 순위정보
public static void main(String[] args) {
List<DisplayCharacter> disCharList =
new ArrayList<DisplayCharacter>();
disCharList.add(new DisplayCharacter("홍길동"));
disCharList.add(new DisplayCharacter("둘리"));
disCharList.add(new DisplayCharacter("희동이"));
disCharList.add(new DisplayCharacter("마이콜"));
for (Thread th : disCharList) {
th.start();
}
//경기결과가 마지막에 나오게 하기위해 조인을 넣어줌
for (Thread th : disCharList) {
try {
th.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("경기 끝...");
Collections.sort(disCharList); //정렬기능 사용
System.out.println("--------------------------------");
System.out.println(" 경기 결과");
System.out.println("");
System.out.println("=================================");
System.out.println(" 순위\t:\t이름");
System.out.println("---------------------------------");
for(DisplayCharacter dc : disCharList) {
System.out.println(" " + dc.getRank() + "\t:\t" + dc.getName());
}
}
}
// 알파벳 대문자 출력을 위한 스레드 //우리가 다루는 타입<>
class DisplayCharacter extends Thread implements Comparable<DisplayCharacter> {
private String name;
private int rank; // 순위
//랭크만 선택해서 게터세터
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public DisplayCharacter(String name) {
super(name); // 스레드 이름 지정
this.name = name;
}
@Override
public void run() {
for(char ch='A'; ch<='Z'; ch++) {
System.out.println(name + "의 출력 문자 : " + ch);
try {
// sleep()메서드의 시간을 200~500 사이의 난수로 설정함.
Thread.sleep((int) (Math.random() * 301 + 200));
}catch(InterruptedException ex) {
ex.printStackTrace();
}
}
System.out.println(name + " 출력 끝...");
this.setRank(T11DisplayCharacterTest.CURR_RANK++);
}
@Override //랭크 기준으로 오름차순 정렬기능 부여
public int compareTo(DisplayCharacter dc) {
return Integer.compare(this.getRank(), dc.getRank());
}
}
'중급과정 > HighJava' 카테고리의 다른 글
[Java] 로또 구매 프로그램 예제 (ArrayList, HashSet, Collections) (0) | 2023.11.30 |
---|---|
[Java] 학생 리스트 정렬 (List, Comparable, Comparator) (0) | 2023.11.30 |
[Java] Thread(스레드)를 이용한 가위바위보 예제 (1) | 2023.11.29 |
[Java] 2일차 HashSet, TreeSet, equals, hashCode (1) | 2023.11.23 |
[Java] 231121_1일차 ArrayList, LinkedList (0) | 2023.11.22 |
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class T11DisplayCharacterTest {
/*
3개(명)의 스레드가 각각 알파벳 대문자를 출력하는데...
출력을 끝낸 순서대로 결과를 출력하는 프로그램 작성하기
*/
static int CURR_RANK = 1; //현재 순위정보
public static void main(String[] args) {
List<DisplayCharacter> disCharList =
new ArrayList<DisplayCharacter>();
disCharList.add(new DisplayCharacter("홍길동"));
disCharList.add(new DisplayCharacter("둘리"));
disCharList.add(new DisplayCharacter("희동이"));
disCharList.add(new DisplayCharacter("마이콜"));
for (Thread th : disCharList) {
th.start();
}
//경기결과가 마지막에 나오게 하기위해 조인을 넣어줌
for (Thread th : disCharList) {
try {
th.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("경기 끝...");
Collections.sort(disCharList); //정렬기능 사용
System.out.println("--------------------------------");
System.out.println(" 경기 결과");
System.out.println("");
System.out.println("=================================");
System.out.println(" 순위\t:\t이름");
System.out.println("---------------------------------");
for(DisplayCharacter dc : disCharList) {
System.out.println(" " + dc.getRank() + "\t:\t" + dc.getName());
}
}
}
// 알파벳 대문자 출력을 위한 스레드 //우리가 다루는 타입<>
class DisplayCharacter extends Thread implements Comparable<DisplayCharacter> {
private String name;
private int rank; // 순위
//랭크만 선택해서 게터세터
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public DisplayCharacter(String name) {
super(name); // 스레드 이름 지정
this.name = name;
}
@Override
public void run() {
for(char ch='A'; ch<='Z'; ch++) {
System.out.println(name + "의 출력 문자 : " + ch);
try {
// sleep()메서드의 시간을 200~500 사이의 난수로 설정함.
Thread.sleep((int) (Math.random() * 301 + 200));
}catch(InterruptedException ex) {
ex.printStackTrace();
}
}
System.out.println(name + " 출력 끝...");
this.setRank(T11DisplayCharacterTest.CURR_RANK++);
}
@Override //랭크 기준으로 오름차순 정렬기능 부여
public int compareTo(DisplayCharacter dc) {
return Integer.compare(this.getRank(), dc.getRank());
}
}
'중급과정 > HighJava' 카테고리의 다른 글
[Java] 로또 구매 프로그램 예제 (ArrayList, HashSet, Collections) (0) | 2023.11.30 |
---|---|
[Java] 학생 리스트 정렬 (List, Comparable, Comparator) (0) | 2023.11.30 |
[Java] Thread(스레드)를 이용한 가위바위보 예제 (1) | 2023.11.29 |
[Java] 2일차 HashSet, TreeSet, equals, hashCode (1) | 2023.11.23 |
[Java] 231121_1일차 ArrayList, LinkedList (0) | 2023.11.22 |