5. 위에서 작성한 스레드 PrimeNumber01을 참고하여 다음 조건을 만족하도록 스레드 PrimeNumber02 프로그램을 작성하여 클래스 Ex05의 main() 메소드에서 테스트하시오.
- 클래스 PrimeNumber02는 1에서 지정된 생성자의 인자까지 소수를 구하여, 지정된 스레드 이름을 출력한 후 소수를 모두 출력하는 프로그램
- 클래스 Ex05의 main() 메소드에서 다음을 실행하면 지정된 스레드 이름이 출력되고, 1에서 20사이의 소수가 다음과 같이 출력
PrimeNumber02 pn = new PrimeNumber02(20, "소수 만드는 스레드");
pn.start();
소수 만드는 스레드: 2 3 5 7 11 13 17 19 |
<소스코드>
Ex05.java
package Chapter8_5;
public class Ex05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PrimeNumber02 pn = new PrimeNumber02(20,"소수 만드는 스레드");
pn.start();
}
}
PrimeNumber02.java
package Chapter8_5;
public class PrimeNumber02 extends Thread{
int num;
PrimeNumber02(int num, String name){
setName(name); // 입력받은 인자를 스레드의 이름으로 지정
this.num = num;
}
public void run() {
boolean s = true;
System.out.println(getName()+":");
for(int i=2;i<=num;i++) { // 2부터 num까지
for(int j=2;j<i;j++) { // 2부터 i까지의 숫자로
if(i%j==0) { // 나누었을때 나누어 떨어지면
s = false; // 소수가 아니다.
break; // 다음 숫자로 넘어가기 위해 바로 정지
}
}
if(s) { // true이면 (=소수이면)
System.out.print(i+"\t");
}
s = true;
}
}
}
6. 위에서 작성한 스레드 PrimeNumber02를 참고하여 다음 조건을 만족하도록 스레드 PrimeNumber03 프로그램을 작성하여 클래스 Ex06의 main() 메소드에서 테스트하시오.
- 클래스 PrimeNumver03은 인터페이스 Runnable을 구현하는 클래스로 1에서 지정된 생성자의 인자까지 소수를 구하여, 스레드 이름을 출력한 후 소수를 모두 출력하는 프로그램 구현
- 클래스 Ex06의 main() 메소드에서 다음을 실행하면 지정된 스레드 이름이 출력되고, 1에서 20사이의 소수가 다음과 같이 출력
new Thread(new PrimeNumber03(25), "소수 만드는 스레드").start();
소수 만드는 스레드: 2 3 5 7 11 13 17 19 23 |
<소스코드>
Ex06.java
package Chapter8_6;
public class Ex06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Thread(new PrimeNumber03(25),"소수 만드는 스레드").start(); // 두번째 인자 = 스레드 이름
}
}
PrimeNumber03.java
package Chapter8_6;
public class PrimeNumber03 implements Runnable{
int num; // 인자를 저장할 변수
PrimeNumber03(int num){
this.num=num;
}
public void run() {
boolean s = true;
System.out.println(Thread.currentThread().getName()+":"); // 현재 스레드의 이름 출력
for(int i=2;i<=num;i++) { // 2부터 num까지
for(int j=2;j<i;j++) { // 2부터 i까지의 숫자로
if(i%j==0) { // 나누었을때 나누어 떨어지면
s = false; // 소수가 아니다.
break; // 다음 숫자로 넘어가기 위해 바로 정지
}
}
if(s) { // true이면 (=소수이면)
System.out.print(i+"\t");
}
s = true;
}
}
}
7. 클래스 PrintTime은 인터페이스 Runnable을 구현하는 클래스로 지정된 생성자의 횟수만큼 현재 시간과 스레드 이름을 출력하는 프로그램으로 다음 조건을 만족하도록 스레드 PrintTime 프로그램을 작성하여 클래스 Ex07의 main() 메소드에서 테스트하시오.
- 클래스 Ex07의 main() 메소드에서 다음을 실행하면 다음과 같이 출력
PrintTime p1 = new PrintTime(3);
Thread th1 = new Thread(p1, "안녕하세요!");
th1.setPriority(Thread.MAX_PRIORITY-1); // 우선순위 가장 높음-1
th1.start();
PrintTime p2 = new PrintTime(6);
Thread th2 = new Thread(p2, "반갑습니다.");
h2.setPriority(Thread.NORM_PRIORITY-1); // 우선순위 중간-1
th2.start();
순위: 4 Thu Sep 27 10:40:18 KST 2018 반갑습니다. |
<소스코드>
Ex07.java
package Chapter8_7;
public class Ex07 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PrintTime p1 = new PrintTime(3);
Thread th1 = new Thread(p1, "안녕하세요!");
th1.setPriority(Thread.MAX_PRIORITY-1); // 우선순위 가장 높음-1
th1.start();
PrintTime p2 = new PrintTime(6);
Thread th2 = new Thread(p2, "반갑습니다.");
th2.setPriority(Thread.NORM_PRIORITY-1); // 우선순위 중간-1
th2.start();
}
}
PrintTime.java
package Chapter8_7;
import java.util.Date;
public class PrintTime implements Runnable{
int num; // 반복횟수
Date now;
public PrintTime(int num) {
this.num = num;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
for(int i=0;i<num;i++) {
now = new Date();
Thread.sleep(1000); // 딜레이를 주기 위해
System.out.println("순위: "+Thread.currentThread().getPriority()+
" "+now+" "+Thread.currentThread().getName());
}
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
참고자료 : 인피니티북스 절대 JAVA
github 주소 :
https://github.com/ch1517/Network-programming/tree/master/Chapter8
'Programming Study > 절대JAVA' 카테고리의 다른 글
[절대JAVA]9장 프로그래밍 연습문제(2) (0) | 2018.09.29 |
---|---|
[절대JAVA]9장 프로그래밍 연습문제(1) (0) | 2018.09.28 |
[절대JAVA]8장 프로그래밍 연습문제(1) (0) | 2018.09.27 |
[절대JAVA]7장 프로그래밍 연습문제(2) (0) | 2018.09.25 |
[절대JAVA]7장 프로그래밍 연습문제(1) (0) | 2018.09.24 |
댓글