거꾸로 바라본 세상
[병렬처리]2. 스레드의 안전성
Language/Java 2016. 12. 12. 11:13

2. 스레드의 안전성 도입 2-0-1. 스레드 안전(Thread Safety) - 멀티 스레드 프로그래밍에서 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에는 문제가 없음을 말한다. ex) 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행결과가 올바르게 출력되는 것. - 병렬 프로그램에서 단순히 스레드와 락(Lock)만 신경 써서 해결되지 않는다. 스레드와 락은 병렬 프로그램을 올바르게 잘 사용하기 위한 도구일 뿐이다. 2-0-2. 스레드에 안전한 코드를 작성하는 방법 - 공유되고 변경할 수 있는 스레드의 상태에 대한 접근을 관리하는 것 2-0-3. 객체의 상태 - 인..

String 보다는 StringBuilder, StringBuffer를 사용해야하는 이유.
Language/Java 2016. 10. 7. 18:01

String 보다는 StringBuilder, StringBuffer를 사용해야하는 이유. 이유는 간단하다. String보다는 Stringbuilder 와 StringBuffer이 성능ㅇ ㅣ좋으므로.. 1. StringBuilder와 StringBuffer을 사용시 append 를 이용할 때 하지 말 것String str ="abcde";String a = new String();StringBuffer sb= new StringBuffer();StringBuilder sbs = new StringBuilder();long start = System.currentTimeMillis();for(int i=0; i

Java static 키워드
Language/Java 2016. 8. 11. 16:20

Java static 키워드 - static은 '정적인, 움직이지 않는다'라는 뜻으로 메모리에 고정된다. 그래서 모든 인스턴스에 접근할 수 있도록 공유가되고 클래스 차원에서 정의된 필드 하여 'class field'라고 한다. 그러므로 static 키워드를 이요하면 객체를 생성하지 않고도 변수나 함수를 사용할 수 있다. - static area는 클래스가 메모리에 로딩되면서 static도 같이 올라가고, 프로그램이 종료되면 JVM에서 해당 메모리를 반환한다. - static은 메모리할당이 한 번만 이루어진다. static 키워드의 사용범위 1. 모든 인스턴스에 공통적으로 사용해야 할 경우 static을 붙인다.- 인스턴스를 생성하면, 서로 독립적이기 때문에 서로 다른 값을 유지하므로 각 인스턴스들이 공통..

java final 키워드
Language/Java 2016. 8. 11. 14:08

final 키워드 - final 키워드는 주로 class 나 method 의 override를 막기위해 사용- 맴버변수, 로컬변수는 변수 초기화 이후 바꿀수 없는 변수를 만드는 용도로 사용 1. 클래스에서 final 사용ex_) A 클래스에서 final 사용시 B 클래스는 A클래스를 상속을 할 수 없다. public final final A {}public class B extends A { } (X 상속불가) 2. 메서드에서 final 사용ex_) A클래스의 a()메서드에 final키워드 입력하고, B클래스에서 A클래스를 상속한 후 a()메서드를 오버라이드 할 수 없다.\public class A { public final void a() { } }public class B extends A { pub..

쓰레드
Language/Java 2016. 5. 25. 13:57

동시성 : 하나의 코어에서 멀티 스레드를 번갈아가며 수행하는 성질병렬성 : 멀티 코어에서 개별 스레드를 동시에 실행하는 성질 동기화(Synchronized)-싱글 스레드 프로그램에서는 한 개의 스레드 객체를 독차지해서 사용하면 되지만, 멀티 스레드는 스레드들이 객체를 공유해서 작업해야할 경우가 있다.이 경우, A를 사용하던 객체가 B에 의해 상태가 변경될 수 있기 때문에 A가 의도했던 것과 다른 결과를 얻을 수 있다.그래서 스레드가 사용중인 객체를 다른 스레드가 변경할 수 없도록 하려면 스레드 작업이 끝날 때까지 객체에 lock을 걸어서 다른 스레드가 사용할 수 없도록 해야한다. 멀티 스레드 프로그램에서 단 하나의 스레드만 실행하도록 할 수 있는 영역을 임계영역(Critical section)이라고 한다..

[NIO] 파일 채널(FileChannel)
Language/Java 2016. 4. 6. 12:03

1. 파일채널 생성과 닫기 (1) 파일 채널 생성 - FileChannel은 정적 메소드인 open() 을 호출하여 사용하거나 IO의 FileInputStream, FileOutputStream의 getChannel() 메소드를 호출하여 사용할 수 있다. 1-1. open() 을이용한 파일생성 FileChannel fileChannel = FileChannel.open(Path path, OpenOption ... options); ex)FileChannel fileChannel = FileChannel.open(Paths.get("c://Temp/file.txt"), StandardOpenOption.READ); Paths은 파일의 경로를 지정하는 것이고 , OpenOptions은 StandardOpe..

달력만들기
Language/Java 2016. 3. 25. 18:35

import java.util.Calendar;import java.util.Scanner; public class Calendars { // 스캐너 클래스 정적 메모리 영역에 올림. static Scanner scanner; public static void main(String args[]) { // year(년) mon(월) date(날짜) i(for문시 사용되는) 변수 생성 int year, month, date, i; Calendar calendar = Calendar.getInstance(); int startDay; // 월 시작 요일 int lastDay; // 월 마지막 날짜 int inputDate = 1; // 입력 날짜 // Scanner클래스 객체생성 scanner = new Sc..

article thumbnail
Java 줄바꿈 처리
Language/Java 2016. 3. 7. 11:17

자바에서 OutputStream을 이용하여 파일 입출력 시 txt 에 저장하면 아래처럼 줄바꿈이 안된다.(난 OutputStream시리즈로만 시도했엇으니까..) (그림 1) "\n" 윈도우에서 자동줄바꿈 처리시 이유는 유닉스(리눅스는) "\n", 윈도우는 "\r\n"으로 줄바꿈을 사용하므로 운영체제마다 줄바꿈 형태가 다른 것이다.자바에서 "\n"로 하고 윈도우에서 사용하면 (그림 1)과 같이 나타나고 "\r\n"으로해주면 (그림 2)처럼 정상적으로 자동 줄바꿈 처리가 된다. (그림. 2) "\r\n으로 처리했을 경우 결과 그러면 맨날 "\r\n", "\n" 둘중 맞게 사용하긴 번거로우다. 그래서 이것을 운영체제에 맞게끔 변환시켜줘야했다. 자바에서 운영체제에 맞게 처리를 지원해준다. 1. System.ou..

SocketAddress 클래스와 NetworkInterface 클래스
Language/Java 2015. 12. 17. 00:30

1. SocketAddress SocketAddress클래스는 소캣생성하는 클래스Socket클래스는 추상클래스이므로 직접 객체를 생성하지 않고하위 InetSocketAddress클래스를 사용하여 인스턴스를 생성 SocketAddress sockadr = new InetSocketAddress(host,port); 특징 - SocketAddress 클래스의 인스턴스는 한번 생성하면 변경이 불가능- InetSocketAddress(int port)와 같이 포트번호만 주면 호스트 IP 주소는 임의로 잡힘(패킷이 전송할 때 커널에서 알아서 디폴트 아이피주소 를 부여)- 생성한 SocketAddress 객체를 사용하여 외부 호스트와 연결을 시도할 때 예외가 발생하면 'unresolved'를 표기하고 재사용할 수 ..