우분투 데스크탑에서 자바개발환경을 세팅하는 방법을 알아보자.

 

OPEN JDK 설치

1. 터미널로 jdk 설치

sudo apt install default-jdk
  • java --version
  • javac --version

 

2. 환경변수 설정

컴파일러 위치 링크 확인

  • which javac

 

readlink -f 로 실제경로 추적

  • readlink -f /usr/bin/javac

 

환경변수 편집(관리자 모드) : sudo vi /etc/profile

자바 컴파일러 실제경로를 JAVA_HOME 변수에 맵핑

  • 윈도우에서 환경변수 path를 설정하는 것과 동일하다고 보면 된다.
  • export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin/javac
  • 저장 후 터미널 재실행

 

출력

echo $JAVA_HOME

 

 

IDE 설치

이클립스 사이트에서 데비안계열 설치파일 다운받기

 

압축해제

tar -zxvf 압축파일명

 

이클립스 실행

 

테스트 컴파일

블로그 이미지

파니동

,

터미널 실행 후 아래 명령어 입력

sudo apt-get install gnome-tweak-tool

 

앱 검색

 

키보드와 마우스

추가배치 옵션 클릭

 

Ctrl 위치

 

이런 툴을 쉽게 설치하고 설정할 수 있어서 매우 편리하다.

우분투 버전 : 20.04

블로그 이미지

파니동

,

쓰레드

프로그래밍/Java 2020. 5. 10. 13:47

쓰레드란 하나의 '프로세스'를 의미한다. 즉 실행중인 프로그램을 프로세스라고 하고, 그 안에서 프로그램이 동작하려면 쓰레드가 필요하다. 쓰레드를 할당하려면 반드시 메모리가 할당 되어야 한다.

 

쓰레드 생성

package com.github.dongpani.자바의정석;

class Ex13_1 {
    public static void main(String args[]) {
        ThreadEx1_1 t1 = new ThreadEx1_1();

        Runnable r = new ThreadEx1_2();
        Thread t2 = new Thread(r);	  // 생성자 Thread(Runnable target)

        t1.start();
        t2.start();
    }
}

class ThreadEx1_1 extends Thread {
    public void run() {
        for(int i=0; i < 5; i++) {
            System.out.println(getName()); // 조상인 Thread의 getName()을 호출
        }
    }
}

class ThreadEx1_2 implements Runnable {
    public void run() {
        for(int i=0; i < 5; i++) {
            // Thread.currentThread() - 현재 실행중인 Thread를 반환한다.
            System.out.println(Thread.currentThread().getName());
        }
    }
}
  • 쓰레드를 생성하는 방법은 Thread 클래스를 상속 받거나, Runnable 인터페이스를 구현하거나 둘 중에 하나이다.

실행결과

 

 

 

동기식 쓰레드

package com.github.dongpani.자바의정석;

public class Ex13_2 {
    public static void main(String[] args) {
        // 현재시간
        long startTime = System.currentTimeMillis();

        for(int i=0; i<300; i++)
            System.out.printf("%s", new String("-"));

        System.out.print("소요시간1:" + (System.currentTimeMillis() - startTime));

        for(int i=0; i<300; i++)
            System.out.printf("%s", new String("|"));

        System.out.print("소요시간2:" + (System.currentTimeMillis() - startTime));

        /**
         * 하나의 쓰레드가 끝난 후 바로 다음 쓰레드를 생성함.
         */

    }
}
  • 하나의 작업이 끝나고 다음 작업을 수행한다.
  • 소요시간1 -> 소요시간2 순서로 출력됨.

 

 

멀티쓰레드

package com.github.dongpani.자바의정석;

public class Ex13_3 {
    static long startTime = 0;

    public static void main(String[] args) {
        ThreadEx3_1 th1 = new ThreadEx3_1();
        th1.start(); // 쓰레드 시작 후 기다리지 않음.
        startTime = System.currentTimeMillis();

        for (int i = 0; i < 300 ; i++)
            System.out.printf("%s", new String("-"));

        System.out.print("소요시간1: " + (System.currentTimeMillis() - Ex13_3.startTime));

    }
}

class ThreadEx3_1 extends Thread {
    public void run() {
        for(int i=0; i<300; i++)
            System.out.printf("%s", new String("|"));

        System.out.print("소요시간2: " + (System.currentTimeMillis() - Ex13_3.startTime));

    }
}
  • 두 개의 쓰레드에서 같은 반복문을 수행.
  • 동시에 작업을 수행하므로 작업 순서를 보장하지 않는다.
  • (소요시간1, 소요시간2) 가 실행할 때 마다 순서가 다를 수 있음.

 

 

I/O블락킹

사용자 입력을 대기한 후 작업실행

 

싱글쓰레드

package com.github.dongpani.자바의정석;

import javax.swing.*;

public class Ex13_4 {
    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);
            }catch(Exception e) {}
        }

    }
}

 

실행결과

 

 

멀티쓰레드

package com.github.dongpani.자바의정석;

import javax.swing.*;

public class Ex13_5 {
    public static void main(String[] args) throws Exception{
        ThreadEx5_1 th1 = new ThreadEx5_1();
        th1.start();

        String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
        System.out.println("입력하신 값은 " + input + "입니다.");
    }
}

class ThreadEx5_1 extends Thread {
    public void run() {
        for(int i=10; i>0; i--) {
            System.out.println(i);
            try{
                sleep(1000);
            }catch (Exception e) {}
        }
    }
}
  • 위 예제외 같은 코딩을 쓰레드를 두 개로 나누어 처리했다.
  • 순서가 보장되지 않는다. 먼저 th1인스턴스가 실행되는 도중 input 값이 들어오면 출력한다.

 

출처: 자바의 정석

 

'프로그래밍 > Java' 카테고리의 다른 글

Iterator를 사용 list의 객체 삭제하기  (0) 2021.11.02
스트림(파일)  (0) 2020.01.04
예외처리  (0) 2019.12.29
스트림  (0) 2019.12.27
람다식  (0) 2019.12.25
블로그 이미지

파니동

,