java

다른 스레드의 종료를 기다림(join()) 스레드는 다른 스레드와 독립적으로 실행되는 것이 일반적이지만, 다른 스레드가 종료될 때까지 기다리다가 실행되야되는 경우가 발생할 수 있다.예를 들어 B라는 스레드는 계산을하는 스레드이고, A라는 스레드는 B스레드가 계산이 끝나면 그 결과값을 가지고 로직을 처리해야하는 상황이다.이 와같은 상황은 아래와 같은 코드를 이용해 구현할 수 있다.(join() 이용) ThreadA{ threadB.start(); // ThreadB 실행 (실행순서 1) threadB.join(); // 일시정지 ...ThreadA의 로직 수행 ; // (실행순서 3) } ThreadB{ run(){ // ThreadB 작업 실행(실행순서 2) } } ThreadA가 ThreadB의 joi..
동기화 메소드와 동기화 블록 공유 객체를 사용할 때 주의할 점멀티 스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있다.이 경우, 스레드 A를 사용하던 객체가 스레드 B에 의해 상태가 변경될 수 있기 때문에 스레드 A가 의도했던 것과는 다른 결과를 산출할 수도 있다. public class User1 extends Thread{ private Calculator calculator; @Override public void run() { calculator.setmemory(100); } public void setCalculator(Calculator calculator) { this.setName("User1"); this.calculator = calculator; } } pub..
Convert with Plain Java(String을 InputStream으로 변환) public void convertToStreamTest(){ String text = "test"; InputStream is = new ByteArrayInputStream(text.getBytes()); } 문자열을 Byte Array로 변환 후, ByteArrayInputStream을 사용하여 InputStream으로 변환한다.
프로세스와 스레드 멀티 프로세스들은 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 서로 독립적이다.멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있어 다른 스레드에게 영향을 미치게 된다. 그렇기 때문에 멀티 스레드에서는 예외처리에 만전을 기해야 한다. 작업 스레드 생성과 실행 Thread 클래스로부터 직접 생성 Runnable 인터페이스를 구현하여 사용(아래예제를 참고 3가지 방법이 존재) public class BeepPrintExample2 { public static void main(String[] args){ // 쓰레드가 동작 Runnable beepTask = new BeepTask(); Thread threa..
왜 제네릭을 사용해야 하는가? 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다. 제네릭은 클래스와 인터페이스, 메소드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 한다. 장점1. 컴파일 시 강한 타입 체크를 할 수 있다. 실행시 타입 에러가 나는 것보다 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지 장점2. 타입 변환(castring)을 제거한다. 비제네릭 코드는 불필요하게 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다. List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // 타입 변환이 필요 List..
JAVA 설치톰캣을 설치하기 위해 JDK가 설치되어 있는지 확인해야 한다.java -version미설치시, java8 설치apt-get install openjdk-8-jre0headless Tomcat 설치apt-get updateapt-get install tomcat8http://서버ip:8080 으로 접속하여 톰캣이 실행되있는지 확인AWS에서 Inbound(8080)을 열어줘야 확인이 가능하다.tomcat의 기본 경로는/var/lib/tomcat8/webapps/ROOT 이며/etc/tomcat8/server.xml 에서 경로 설정을 할 수 있다.
final 필드와 상수 final 필드final의 의미는 최종적이라는 뜻을 갖고 있다. Final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다. final 필드의 초기값을 줄 수 있는 방법은 두가지이다. 첫 번째는 필드 선언시에 초기값을 주는 방법이며, 두 번째는 생성자를 통해 초기값을 주는 방법이다. (만약 초기화되지 않은 final 필드를 그대로 남겨두면 컴파일 에러가 발생한다.) 상수(static final)일반적으로 불변의 값을 상수라고 부른다. 불변의 값을 저장하는 필드를 자바에서는 상수(constant)라고 부른다. final 필드는 한 번 초기화되면 수정할 수 없는 필드이지만, final 필드를 상수라고 부르진 않는다. 왜냐하면 불변의 값은 객체..
정적멤버와 static정적(static)은 ‘고정된’이라는 의미를 가지고 있다.정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다. 정적 멤버 선언1234567public class 클래스{ // 정적 필드 static 타입 필드 // 정적 메소드 static 리턴 타입 메소드() {… }}cs 정적필드, 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다. (클래스 로딩이 끝나면 바로 사용할 수 있음) 인스턴스 필드 => 객체마다 가지고 있어야할 데이터 정적 필드 => 객체마다 가지고 있을 필요성이 없는 공용적인 데이터 일 경우 각각에 맞게 사용하면 된다. 123456p..
생성자 대신 정적 팩터리 메서드를 사용할 수 없는지 생각해 보라 클래스를 통해 객체를 만드는 일반 적인 방법은 public으로 선언된 생성자(constructor)를 이용하는 것이나, 한가지 방법이 더 존재한다. 클래스에 public으로 선언된 정적 팩터리 메서드(static factory method)를 추가하는 것이다. 아래의 예는 기본타입 boolean 값을 Boolean 객체에 대한 참조(reference)로 변환하는 것이다. public static Boolean valueOf(boolea b){ return b ? Boolean.TRUE : Boolean.False; } public으로 선언된 생성자 대신 정적 팩터리 메서드를 제공하는 방법의 장단점은 다음과 같다 장점 생성자와 달리 정적 팩터..
객체화된 기본 자료형 대신 기본 자료형을 이용하라 자바의 자료형 시스템은 두 부분으로 나뉜다. 하나는 int, double, boolean 등의 기본 자료형(primitive type) 다른 하나는 String, List 등의 참조 자료형(reference type) 이다. 모든 기본 자료형에는 대응 되는 참조 자료형이 있는데, 이를 객체화된 기본 자료형(boxed primitive type)이라 부른다. (Integer, Double .. ) ※릴리스 1.5부터 자동 객체화(autoboxing)과 자동 비객체화(auto-unboxing)이 언어의 일부가 됨 기본 자료형과 객체화된 자료형 사이에는 세 가지 큰 차이점이 있다. 첫번째, 기본 자료형은 값만 가지지만 객체화된 기본 자료형은 값 외에도 신원(i..
깡냉쓰
'java' 태그의 글 목록 (6 Page)