오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_20 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_20

chan_96 2022. 1. 14. 18:24
728x90

쓰레드(Thread)

Multitasking = Multi(다중) + tasking(작업)

> 다수의 작업을 동시에 처리

 

보통의 응용프로그램은 여러(multi) 작업(task)을 동시에 실행

 

쓰레드(thread) thread of control
: 프로그램 코드를 실행하는 하나의 제어
: 하나의 쓰레드로 하나의 작업만 처리 가능


여러 개의 작업을 동시에 처리하려면?
-> 쓰레드가 여러 개 필요

 

 

멀티프로세싱(Multi Processing)_싱글 스레드

: 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 기법

 

멀티스레딩(Multi threading)

: 하나의 응용프로그램을 동시처리가 가능한 여러 작업으로 분할하고 작업의 개수만큼 스레드를 생성하여 각 스레드로 하여금 하나의 작업을 처리하도록 하는 기법

 

 

쓰레드 작성

1. Thread 클래스

Blitzcrank 클래스
더보기
package Thread;

//동시에 여러 스킬을 사용할 수 없음 //싱글스레드 -> 기본클래스
public class Blitzcrank {
	private String skill; //현재 사용중인 스킬 저장 필드
	
	public Blitzcrank(String key) { //특정한 스킬을 사용할 블츠객체 생성
		skill = key;
	}
	
	//스킬 사용 메서드
	public void run() {
		System.out.println("입력 키 : " + skill);
		for(int i = 1;i <= 3;i++) {
			System.out.println(skill + "스킬 사용 중 : " + i + "s");
		}
		System.out.println(skill + "스킬 사용 종료");
	}//end of run()	
}


Ari 클래스
더보기
package Thread;

//동시에 여러개의 스킬을 사용할 수 있음 -> 멀티태스킹 -> 멀티프로세싱 / 멀티스레드(자바)
//멀티스레드 작성 첫번째 방법1. Thread 클래스를 상속
public class Ari extends Thread{
	private String skill;
	
	public Ari(String key) {
		skill = key;
	}
	
	//Thread클래스 run() 메서드 오버라이딩(재정의)
	//run() -> 스레드(다중작업) 코드
	//스레드는 run() 메서드 에서부터 실행을 시작하고 run() 종료되면 스레드도 종료
	//오버라이딩 하지않으면 Thread 클래스에 작성된 run()을 호출하게 되며
	//이때 run()은 아무일도 하지 않고 스레드를 바로 종료
	public void run() {
		System.out.println("입력 키 : " + skill);
		for(int i = 1;i <= 3;i++) {
			System.out.println(skill + "스킬 사용 중 : " + i + "s");
		}
		System.out.println(skill + "스킬 사용 종료");
	}
}

Main 클래스
더보기
package Thread;

public class Main {
	public static void main(String[] args) {
		
		String[] key = {"Q", "W", "E"};
		
		for (int i = 0; i < key.length; i++) {
			Blitzcrank b = new Blitzcrank(key[i]);
			b.run();
		}
		
		System.out.println("===========================");
		for (int i = 0; i < key.length; i++) {
			Ari a = new Ari(key[i]);
			//start() 메서드를 호출하면 스레드를 동작 시킴
			//스레드가 실행을 시작하도록 하기 위해선는 꼭 start() 메서드를 호출해야함!
			//start()메서드는 절대로 오버라이딩 하면 안됨!!
			
			//start : 생성된 스레드 객체를 스케줄링이 가능한 상태로 전화하도록 JVM에게 지시
			//스케줄링 : 메모리에 적재된 프로그램을 CPU(연산장치)가 실행할수 있도록 운영체제가 스레드에게 CPU 할당
			//스케줄링에 의해서 해당 스레드가 선택이되면 JVM에 의해서 run() 메서드가 호출되어 실행이 됨
			a.start();
		}
	}
}

 

Blitzcrank 클래스 호출 후 출력

Ari 클래스 호출 후 출력

 

 

2. Runnable 인터페이스

Ari2 클래스
더보기
package Thread;

public class Ari2 implements Runnable {
	private String skill;
	
	public Ari2(String key) {
		skill = key;
	}
	
	//Thread클래스 run() 메서드 오버라이딩(재정의)
	//run() -> 스레드(다중작업) 코드
	//스레드는 run() 메서드 에서부터 실행을 시작하고 run() 종료되면 스레드도 종료
	//오버라이딩 하지않으면 Thread 클래스에 작성된 run()을 호출하게 되며
	//이때 run()은 아무일도 하지 않고 스레드를 바로 종료
	public void run() {
		System.out.println("입력 키 : " + skill);
		for(int i = 1;i <= 3;i++) {
			System.out.println(skill + "스킬 사용 중 : " + i + "s");
		}
		System.out.println(skill + "스킬 사용 종료");
	}
}

Main 클래스
더보기
package Thread;

public class Main {
	public static void main(String[] args) {
		
		String[] key = {"Q", "W", "E"};

		System.out.println("=============================");
		for (int i = 0; i < key.length; i++) {
			Thread thread = new Thread(new Ari2(key[i]));
			thread.start();
		}
		
		
	}
}
Ari2 클래스 호출 후 출력


 

채팅 프로그램 만들기

 

Thread

Socket

서버와 클라이언트가 데이터를 송수신하는 컴퓨터의 입출구

 

Stream

하드디스크, 네트워크 및 메모리 등과 같이 데이터 소스나 목적지 사이에 데이터를 주고받기 위하여 형성된 채널을 통하여 일련의 데이터가 흘러 들어가거나, 흘러 들어오는 것

 

Buffer

어떤 장치에서 다른 장치로 데이터를 송신할 때 일어나는 시간의 차이나 데이터 흐름의 속도 차이를 조정하기 위해 일시적으로 데이터를 기억시키는 장치(임시 기억 공간)

728x90
Comments