티스토리 뷰

 

Concurrent 소프트웨어

- 동시에 여러 작업을 할 수 있는 소프트웨어

ex) 웹 브라우저로 유튜브 보며 키보드로 문서에 타이핑, 녹화를 하면서 코딩을 하고 적어둔 문서를 보거나 수정

 

자바에서 지원하는 Concurrent 프로그래밍

- 멀티프로세싱

- 멀티스레드

 

 

 

 

 

자바 멀티스레드 프로그래밍

- Thread / Runable

 

Thread 만드는 방법 1. - 상속(매우 불편)

public class App {

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("Hello Thread" );
    }

    static class MyThread extends Thread{
        @Override
        public void run() {
            System.out.println("Thread " + Thread.currentThread().getName());
        }
    }
}

 

 

 

방법2. Runnable구현 (스레드 생성자에 Runnable을 준다)

public class App {

    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread : " + Thread.currentThread().getName());
            }
        });
        thread.start();
        System.out.println("Hello Thread" + Thread.currentThread().getName() );
    }
}

 

-> 스레드는 순서를 보장하지 않아 보기의 결과같이 나올 수 있음

 

 

 

 

 

스레드의 주요기능1. sleep 

public class App {

    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException e) { /// 깨우는거
                    e.printStackTrace();
                }
                System.out.println("Thread : " + Thread.currentThread().getName());
            }
        });
        thread.start();
        System.out.println("Hello Thread" + Thread.currentThread().getName() );
    }


}

->1초 재우고 실행되는거라 높은 확률로 main이 거의 먼저실행됨

- 현재 스레드 멈춰두기

 

 

 

 

스레드 주요기능 2. interrupt

public class App {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

                while (true){
                    System.out.println("Thread : " + Thread.currentThread().getName());
                    try {
                        Thread.sleep(1000L);
                    } catch (InterruptedException e) { /// 깨우는거
                        System.out.println("exit!");
                        return;
                    }
                }


            }
        });
        thread.start();

        System.out.println("Hello : " + Thread.currentThread().getName() );
        Thread.sleep(3000L);
        thread.interrupt();
    }
}

-> 무한루프에서 3초후 InterruptedException발생시켜 exit 찍히도록

- 다른 스레드를 개워서 InterruptedException을 발생시킨다

 

 

 

스레드 주요기능 3. join

public class App {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread : " + Thread.currentThread().getName());
                try {
                    Thread.sleep(3000L);
                } catch (InterruptedException e) { /// 깨우는거

                    throw new IllegalStateException(e);
                    }
                }
            });
        
        thread.start();

        System.out.println("Hello : " + Thread.currentThread().getName() );

        thread.join();//기다릴 스레드를 조인하면됨
        System.out.println(thread + " is finished");
    }
}

 

- 다른 스레드가 끝날때까지 기다린다

 

 

 

강의 : 인프런 더 자바, Java8

 

 

 

 

 

*기본이지만 짚고넘어갈 부분*

#스레드와 프로세스의 차이 (요즘 면접에서 많이 물어봄)

프로그램 -> 프로세스 -> 스레드

- 프로그램은 메모리 할당이 안된 코드 덩어리

- 프로세스는 메모리에 올라와 실행되고 있는 실행중인 프로그램의 인스턴스

- 그 포로세스에서 실행되는 독립적인 실행단위를 스레드라고 함(프로세스는 하나 이상의 스레드를 가짐)

- 즉, 프로세스의 특정한 수행 경로

 

-> 프로세스 내에서 실행되는 각각의 일을 스레드라고 하고, 프로세스 내에서 실행되는 세부 작업 단위로 여러개의 스레드가 하나의 프로세스를 이루게 되는 것

 

 

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-os.html

 

↑ 이 두곳에 잘 설명되어 있음

 

 

 

 

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday