46일차 java 연산(2023-02-27)

권단비·2023년 2월 27일
0

IT

목록 보기
87/139

[Eclipse 연습]

[계산]
//아래의 가로 찍기와 세로찍기를 쓰레드로 돌리시오.
package ThreadTest;
public class Test2 {
	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		a.start();
		b.start();
	}
}
class A extends Thread {
	public void run() {
		for (int i = 0; i < 300; i++)
			System.out.printf("%s", new String("-"));
	}
}
class B extends Thread {
	public void run() {
		for (int i = 0; i < 300; i++)
			System.out.printf("%s", new String("|"));
	}
}
[결과값]
------------------|||---------------------------------------------------------------------------------------------||||||||||||||||||||||||||||||||||||||||||||-------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||-------------------------------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||-------------------------------------------------------------------------------------------------------------------------------

[멀티스레드]

[계산]
package ThreadTest;
import javax.swing.JOptionPane;
public class MultiThreadTest2 {
	public static void main(String[] args) throws Exception {
		String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
		System.out.println("입력하신 값은" + input + "입니다.");

		for (int i = 10; i > 0; i--) {
			System.out.println(i);
			try {
				Thread.sleep(1000); // 1초간 시간을 지연한다.
			} catch (Exception e) {
			}
		}
	}
}
[결과값]
입력하신 값은20입니다.
10
9
8
7
6
5
4
3
2
1


[계산 : 상기 코드를 동시에 실행되도록 만듦]
package ThreadTest;
import javax.swing.JOptionPane;
public class MultiThreadTest2 {
	public static void main(String[] args) throws Exception {
		Thread1 th1 = new Thread1();
		th1.start();
		String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
		System.out.println("입력하신 값은" + input + "입니다.");
	}
}
class Thread1 extends Thread {
	@Override
	public void run() {
		for (int i = 10; i > 0; i--) {
			System.out.println(i);
			try {
				Thread.sleep(2000);
				// 1초에 버금가는 시간을 지연한다. | 딱 1초가 아니다.(정확하지 않음)
				// 1초에 1000번 이상 돌아간다.
				// .sleep(n) : 1초동안 다른 스레드에게 CPU를 양보한다.(제어권을 준다)
			} catch (Exception e) {
			}
		}
	}
}
[결과값]
10
9
8
7
입력하신 값은11입니다.
6
5
4
3
2
1


[Synchronized(동기화)]

동기화(synchronized) : 동기를 기다린다.

동기화가 안되면 하나의 스레드가 작업이 끝나기 전에 다른 스레드가 치고 들어온다.
동기화 되면 동일 객체의 한 작업이 끝날 때까지 기다린다.
[계산]
// 동기화(synchronized) : 동기를 기다린다.
package ThreadTest;
class StringPrint {
	synchronized void display(String s) { // String을 하나 받아서 5번 찍는다.
		for (int i = 1; i <= 5; i++) {
			// Thread로 인해 1을 7번 찍고 다음 번호를 실행함 : 동기화(Synchronized)가 안된 것 : 하나의 스레드가 작업이 끝나기 전에 다른 스레드가 치고 들어온다.
			// Synchronized로 인해 동기화되어 동일 객체의 한 작업이 끝날 때까지 기다린다.
			System.out.println(Thread.currentThread().getName() + ":" + s + " "); // 현재 돌아가는 스레드의 이름을 표시한다.
		}
		System.out.println();
	}
}
class PrintThread extends Thread {
	private StringPrint sp;
	private String str;
	public PrintThread(String s, StringPrint sp) {
		this.sp = sp;
		this.str = s;
	}
	@Override
	public void run() {
		sp.display(str);
	}
}
public class Synchronization {
	public static void main(String[] args) {
//		System.out.println(Thread.currentThread().getName() + ":"); // main 스레드가 표시된다.
		StringPrint sp = new StringPrint();

		Thread th1 = new PrintThread("1", sp);
		Thread th2 = new PrintThread("2", sp);

		th1.start();
		th2.start();
	}
}
[결과값]
Thread-0:1 
Thread-0:1 
Thread-0:1 
Thread-0:1 
Thread-0:1 

Thread-1:2 
Thread-1:2 
Thread-1:2 
Thread-1:2 
Thread-1:2 

[java네트워크]

[계산]
package ThreadTest;
import java.net.*;
import java.util.*;
class InetAdressEx {
	Scanner scanner;
	public InetAdressEx() {
		System.out.println("Host 이름을 입력하세요.");

		scanner = new Scanner(System.in);
		try {
			InetAddress inetAddress = InetAddress.getByName(scanner.next());

			System.out.println("Computer NAME : " + inetAddress.getHostName());
			System.out.println("Computer IP : " + inetAddress.getHostAddress());

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}
public class Important {
	public static void main(String[] args) {
		new InetAdressEx();
	}
}
[결과값]
Host 이름을 입력하세요.
192.168.0.135
Computer NAME : DESKTOP-0KKV24T
Computer IP : 192.168.0.135

Host 이름을 입력하세요.
www.naver.com
Computer NAME : www.naver.com
Computer IP : 223.130.200.107

0개의 댓글