본문 바로가기

언어/Java

(93)
스레드 상태 스레드 객체를 생성(NEW) 하고 start() 메소드를 호출하면 실행X 실행대기상태(RUNNABLE)가 된다. 실행을 기다리는 상태. 실행 대기하는 스레드는 CPU 스케쥴링에 따라 CPU를 점유하고 run() 메소드를 실행, 이때를 실행(RUNNING) 상태 실행 스레드는 run() 메소드를 모두 실행하기 전에 스케줄링에 의해 다시 실행 대기 상태로 돌아갈 수 있다. 그리고 다른 스레드가 실행 상태가 된다. 더 이상 실행할 코드가 없으면 스레드의 실행은 멈추게 된다. 이 상태를 종료상태(TERMINATED) = DEAD 상태 Thread 클래스의 메소드 join() = 한 스레드가 끝날 때까지 일시정지 wait() 동기화 블록 내에서 스레드를 일시 정지 상태 ※ 다른 스레드에게 실행 양보 yield()..
스레드 이름 부여하기 ※ 스레드는 이름을 가지고 있다. 메인 스레드는 'main'이라는 이름을 가지고 있고, 작업 스레드는 자동적으로 'Thread-n'이라는 이름을 가진다. 작업 스레드의 이름을 Thread-n 대신 다른 이름으로 설정하고 싶다면 Thread 클래스의 setName() 메소드를 사용하면 된다. package ch14.sec04; public class ThreadNameExample { public static void main(String[] args) { Thread mainThread = Thread.currentThread();//이 코드를 실행하는 스레드 객체 참조 얻기 System.out.println(mainThread.getName() + " 실행"); for(int i=0; i
Thread pop, push class Push { Share s; public Push(Share s) { this.s=s; } } class Pop { Share s; public Pop(Share s) { this.s=s; } } class Share{ int i; } public class ThreadShareTest { public static void main(String[] args) { Share s = new Share(); Push push = new Push(s); Pop pop = new Pop(s); System.out.println(pop.s.i); } } class Share{ private int i;// 인스턴스변수 public void push() {// i값 1 증가 for(int i = 0; i
ThreadSleep ※ 일시정지 sleep() 스케쥴 조절, 알아서 깨어남 timeout되서 sleep상태에서 깨어나면 run()이 아니라 Runnable로 갔다가 줄을 서고 기다렸다가 다시 cpu 점유할 상태로 가다보니 cpu 점유할 확률 떨어진다 import java.text.SimpleDateFormat; import java.util.Date; public class ThreadSleepTest { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); // main thread SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); //Thread t = ..
멀티 스레드 ※ 스레드 : 프로세스를 구성하는 단위 운영체제는 실행 중인 프로그램을 프로세스(process)로 관리한다. 멀티 태스킹(multi tasking)은 두 가지 이상의 작업을 동시에 처리하는 것을 말하는데, 이때, 운영체제는 멀티 프로세스를 생성해서 처리한다. 하지만 멀티 태스킹이 꼭 멀티 프로세스를 뜻하지는 않는다. 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 프로그램도 있다. 예를 들어 메신저는 채팅 작업을 하면서 동시에 파일 전송 작업을 수행하기도 한다. 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있는 이유는 멀티 스레드(multi thread)가 있기 때문이다. 스레드(thread)는 코드의 실행 흐름을 말하는데 프로세스 내에 스레드가 두 개라면 두 개의 코드 실행 흐름이 ..
성능 향상 스트림 프로그램이 입출력 소스와 직접 작업하지 않고 중간에 메모리 버퍼(buffer)와 작업함으로써 실행 성능 향상 가능 출력 스트림의 경우 직접 하드 디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로써 출력 속도 향상 가능 버퍼는 데이터가 쌓이기를 기다렸다가 꽉 차게 되면 데이터를 한꺼번에 하드 디스크로 보냄으로써 출력 횟수를 줄여준다. 입력 스트림에서도 하드 디스크로부터 직접 읽는 것보다는 메모리 버퍼로부터 읽는 것이 빠르다. 성능향상을 위해 내부버퍼를 사용함. 목적지로 직접 쓰는게 아니라 버퍼에 채우고 다 채워지면 한꺼번에 쓰기(자동으로 auto flush) 중간에 보내고싶으면 직접 flush flush가 되면 버퍼가 클리어됨 버퍼를 쓰는 이유 : 하나씩 직접 쓰면 목적지/자원과 만나는 시간이..
기본자료형과 참조형의 차이 기본자료형에는 null값 적용을 못한다. 그래서 if("".equals(prodName)) { 여기에는 = null 넣은거고 아래의 prodPrice에는 "0" 넣은것. null 은 참조안함. 값이 아니다.라는 뜻. "" 도 의미가 있다. null값 넣고싶으면 참조자료형을 써야한다. prodPrice도 null 값 넣고 싶으면 Product.java에서 → private int prodPrice; 말고 Integer prodPrice;로 사용하면 된다. int보다 Integer가 좀 더 넓게 쓸 수 있다.(wrapper class의 도움)
Product 예제 4 ※ com.my.product.dao.ProductDAOFile 작성하기 ex) 파일명 : D:\products.txt 파일구조 #상품번호값:상품명값:상품가격값 C0001:아메리카노:1000 C0002:아이스아메리카노:1000 package com.my.product.dao; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; i..