# 02 썸네일형 리스트형 [Flutter/Dart] 기본 문법 보호되어 있는 글입니다. [윤성우 열혈자바] 34-3. 쓰레드를 생성하는 더 좋은 방법 쓰레드 풀 모델 쓰레드의 생성과 소멸은 리소스 소모가 많은 작업이다. 그런데 쓰레드 풀은 쓰레드의 재활용을 위한 모델이다. 쓰레드 풀 기반의 예제 1 class ExecutorsDemo { public static void main(String[] args) { Runnable task = () -> { // 쓰레드에게 시킬 작업 - Runnable 구현한 인스턴스 생성 int n1 = 10; int n2 = 20; String name = Thread.currentThread().getName(); System.out.println(name + ": " + (n1 + n2)); }; ExecutorService exr = Executors.newSingleThreadExecutor(); exr.subm.. [윤성우 열혈자바] 34-2. 쓰레드의 동기화 쓰레드의 메모리 접근 방식과 그에 따른 문제점 class Counter { int count = 0; // 공유되는 변수 public void increment() { count++; // 첫 번째 쓰레드에 의해 실행 } public void decrement() { count--; // 또 다른 쓰레드에 의해 실행 } public int getCount() { return count; }} class MutualAccess { public static Counter cnt = new Counter(); public static void main(String[] args) throws InterruptedException { Runnable task1 = () -> { for(int i = 0; i < .. [윤성우 열혈자바] 34-1. 쓰레드의 이해와 쓰레드의 생성 실행중인 프로그램 - 프로세스프로세스의 단위 - 쓰레드메인 메소드는 자동으로 실행되는 메인 쓰레드 쓰레드의 이해와 쓰레드의 생성 방법 쓰레드 프로그램 내에서 실행의 흐름을 이루는 최소의 단위 main 메소드의 실행도 하나의 쓰레드에 의해 진행이 된다. class CurrentThreadName { public static void main(String[] args) { Thread ct = Thread.currentThread(); // 현재 진행중인 쓰레드 정보가 담김 String name = ct.getName(); // 쓰레드의 이름을 반환 System.out.println(name); }} main 쓰레드를 생성하는 방법 public static void main(String[] args) { R.. [윤성우 열혈자바] 33-3. NIO 기반의 입출력 I/O 스트림의 성능을 보완하기 위해 채널과 버퍼가 나옴!I/O는 왜 느릴까?구조적인 문제 - 가상머신에서 작동하기 때문앱에서 자바가상머신을 거쳐 O/S를 거쳐 하드웨어를 거쳐 파일까지 도달극복하기 위해 가상머신을 거치지 않고 다이렉트로 O/S에 전달 (채널, 버퍼)I/O에 성능이 문제되지 않는 상황이 훨씬 많기 때문에 무조건 채널과 버퍼를 사용할 필요는 없음! NIO의 채널(Channel)과 버퍼(Buffer) 스트림과 채널의 공통점 “스트림도 채널도 데이터의 입력 및 출력을 위한 통로가 된다." 스트림과 채널의 차이점 “스트림은 한 방향으로만 데이터가 이동하지만 채널은 양방향으로 데이터 이동이 가능하다." 채널에만 존재하는 제약사항 “채널은 반드시 버퍼에 연결해서 사용해야 한다."채널과 버퍼는 독립적.. [윤성우 열혈자바] 33-2. NIO.2 기반의 I/O 스트림 생성 I/O 스트림 생성이 복잡하다는 평이 있어서 일부를 대체하기 위해 NIO.2 가 나옴. 바이트 스트림의 생성 (NIO.2 기반) - 32챕터 일부 변경됨! public static void main(String[] args) { Path fp = Paths.get("data.dat"); try(DataOutputStream out = new DataOutputStream(Files.newOutputStream(fp))) { out.writeInt(370); out.writeDouble(3.14); } catch(IOException e) { e.printStackTrace(); }} public static void main(String[] args) { Path fp = Paths.get("data.d.. [윤성우 열혈자바] 33-1. 파일 시스템 기본적인 파일 시스템 1 • 윈도우의 파일 경로를 나타내는 방식: 다수의 상위 디렉토리 가질 수 있음 C:\javastudy\simpe.java ( 예, C:, D:, E: 등 ) • 리눅스의 파일 경로를 나타내는 방식: 하나의 상위 디렉토리를 가짐 /javastudy/simple.java 기본적인 파일 시스템 2 : 절대 경로, 상대 경로 • 윈도우 절대 경로 C:\javastudy\simpe.java - 루트 디렉토리를 시작으로 파일 경로를 말함. 바뀔일이 없음.• 리눅스 절대 경로 /javastudy/simple.java • 윈도우 상대 경로 javastudy\simpe.java - 너의 부모는 누구니? 어디위치냐에 따라 달라짐. 루트 디렉토리가 없음.• 리눅스 상대 경로 javastudy/simp.. [윤성우 열혈자바] 32-4. I/O 스트림 기반의 인스턴스 저장 ObjectInputStream & ObjectOutputStream • ObjectInputStream 인스턴스를 입력하는 스트림 : 인스턴스 직렬화 ObjectInputStream oi = new ObjectInputStream(new FileInputStream("Object.bin")) public final Object readObject() throws IOException, ClassNotFoundException • ObjectOutputStream 인스턴스를 출력하는 스트림 : 인스턴스 역직렬화 ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream("Object.bin")) public final void writeObj.. 이전 1 ··· 42 43 44 45 46 47 48 ··· 86 다음