[계산] //아래의 가로 찍기와 세로찍기를 쓰레드로 돌리시오. 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) : 동기를 기다린다. 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
[계산] 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