본문 바로가기

JAVA/척척학사 스터디

[JAVA] 스레드(thread), 람다식(Lambda)

스레드

멀티 스레딩

  • 하나의 프로그램이 동시에 여러 가지 작업을 할 수 있도록 하는 것
  • 각각의 작업이 스레드(thread)

멀티 스레딩의 문제점

여러 스레드들이 같은 데이터를 공유할 때, 동기화 문제 발생

 

Thread 클래스

Thread 클래스

EX) Thread 클래스를 상속하는 방법

class MyThread extends Thread {			// ①
	public void run() {					// ②
		for (int i = 0; i <=10; i++)
			System.out.print(i + " ");
	}
}

public class MyThreadTest {
	public static void main(String args[]) {

		Thread t = new MyThread();	// ③
		t.start();						// ④
	}
}
더보기

0 1 2 3 4 5 6 7 8 9 10

Thread 클래스를 상속받은 후에 run() 메소드를 재정의하고, 안에 작업을 기술한다.
 

EX) 람다식을 이용한 스레드 작성

public class LambdaTest {

	public static void main(String args[]) {

		Runnable task = () -> {
		for (int i = 0; i <=10; i++)
				System.out.print(i + " ");
		};

		new Thread(task).start();
	}
}
더보기

0 1 2 3 4 5 6 7 8 9 10


(참고)

https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[JAVA] 람다식(Lambda)의 개념 및 사용법

람다함수란? 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어입니다. 현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람

khj93.tistory.com

람다함수

프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어

 

특징

  • 이름을 가질 필요가 없다: 익명 함수 (Anonymous functions)
  • 두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화: 커링 (Curring)

람다의 표현식

1. 람다는 매개변수 화살표(->) 함수몸체로 이용하여 사용 할 수 있습니다.
2. 함수몸체가 단일 실행문이면 괄호{}를 생략 할 수 있습니다. 
3. 함수몸체가 return문으로만 구성되어 있는 경우 괄호{}를 생략 할 수 없습니다.
 
2. () -

람다식 예제

 

EX) 그래픽 버전 카운터 만들어보기

스윙 컴포넌트를 사용하여서 0부터 10까지 1초 단위로 카운트다운하는 애플리케이션을 그래픽 모드로 작성하여 보자.
import javax.swing.*;
import java.awt.*;

public class CountDownTest extends JFrame {

    private JLabel label;

    class MyThread extends Thread {
        public void run() {
            for (int i = 0; i <=10; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                label.setText(i + "");
            }

        }
    }
    public CountDownTest() {
        setTitle("카운트다운");
        setSize(400, 150);
        label = new JLabel("0");
        label.setFont(new Font("Serif", Font.BOLD, 100));
        add(label);
        setVisible(true);


        (new MyThread()).start();


    }

    public static void main(String[] args) {
        CountDownTest t = new CountDownTest();
    }
}

실행결과

1초마다 카운트

 

스레드 상태