Day 21

·2023년 7월 5일
0

Global_2023_2

목록 보기
20/56
post-thumbnail

1. 아래의 용어에 대하여 설명하시오.

-프로그램

  • 자바등에 의해 만들어진, 컴퓨터가 실행하는 코드덩어리

-프로세스

  • 프로그램이 실행 될때의 순서

-쓰레드

  • 프로그램이 실행 될때 나눠진 작업목록

-멀티 프로세스

  • 2개의 CPU에 2개의 일꾼

-멀티 쓰레드

  • 1개의 CPU에 2개의 일꾼 (더 효율적)

2.아래를 쓰레드로 생성하여 프로그래밍 하시오.

- 300번 찍기
| 300번찍기

class MyThread1 extends Thread{
@Override
public void run() {
	System.out.println(getName());
	for(int i = 0; i < 300; i++) {
		System.out.println("-");
	}
}
}
class MyThread2 extends Thread{
@Override
public void run() {
	System.out.println(getName());
	for(int i = 0; i<300; i++) {
		System.out.println("|");
	}
}
}

public class 300 {

public static void main(String[] args) throws Exception{
	String name = Thread.currentThread().getName();
	System.out.println(name);
	
	MyThread1 th1 = new MyThread1();
	MyThread2 th2 = new MyThread2();
	th1.start();
	th2.start();
			}
	}
    

3. 자바에서 쓰레드를 생성(코딩)하는 2가지 방법은?

  1. 2번의 방식처럼 Thread 클래스를 상속받아 run 메소드를 오버라이딩

  2. 아래처럼 Runnable 인터페이스를 implements 후 run 메소드를 정의

    class MyThread1 implements Runnable{
    @Override
    public void run() {
    for(int i = 0; i < 300; i++) {
    System.out.println("-");	
    
    public class Thread {
    public static void main(String[] args) throws Exception{
    Runnable runnable = new MyThread1();
    Thread th3 = new Thread(runnable);
    th3.start();}}}

Point

  • BufferedWriter는 String 전체 쓰기 가능

    • (ks, ks[0], ks[ks.length()-1]) 같은 형태
      • []번째 문자부터 시작
    • (보조스트림 없으면 문자 한개씩 저장됨)
  • 쓰레드

    • "동시에"

    • 웹프로그래밍에서는 사용되지 않음(어플리케이션에서 사용됨)

    • 멀티프로세스 vs 멀티쓰레드

      • 원래는 1CPU에서 1프로그램밖에 실행할수 없었다
    • 컨텍스트 스위칭 (여러 프로그램을 동시에 사용할수 있도록 함)

      • 클럭이 높다 = 동시에 사용할수 있도록 속도가 빠르다
      • run 이 쓰레드의 메인이다
      • 스케쥴링 원리로 동작
    • 프로그램(프로세스) 안에 또 다른 프로그램(쓰레드)

    • start로 os에 쓰레드에 등록시켜서 실행시키는것

      • os가 관리하기 때문에 순서등은 알수없다
    • 싱글 프로세스는 기본적으로 main 쓰레드가 있다.

    • 동기화에 주의 필요

    • sleep(1000)은 컨텍스트 스위칭을
      1초(보장못함,대략적)동안 다른 쓰레드에게 주라는 의미

      • cease 일시적으로 멈추다
      • subject to ~에 따라
    • 단일쓰레드 -> 멀티쓰레드의 문제 : dead lock

      • sleep 했을때 다른 쓰레드가 치고 들어와서 모순을 발생시킨다
      • 그래서 동기화가 필요하다

0개의 댓글