스레드풀 - 병렬작업 처리가 많아지면 스레드 개수 증가 -> 스레드 생성 및 스케쥴링을 CPU가 바빠져서 메모리 많이 사용 - 결국 성능저하. - 갑작스런 병렬 작업처리가 많아질 때 스레드풀을 이용. - 스레드를 제한된 개수만큼 정해놓고 작업큐(Queue)에 들어오는 작업들을 하나씩 스레드가 맡아서 처리. - 스레드풀 생성/사용을 위해 Executors 클래스와 ExecutorService 인터페이스를 제공. - Executors의 다양한 정적메소드로 ExecutorService의 구현객체를 만들 수 있는데 이것이 바로 스레드풀. 스레드풀 생성 Executors 클래스 - newCachedThreadPool() - newFixedThreadPool() ExecutorService executorServi..
Thread Group - 관련된 스레드를 묶어서 관리할 목적으로 사용. - JVM이 실행될때 - system 스레드 그룹을 만듬 - JVM 운영에 필요한 스레드들을 생성 - system 스레드 그룹에 포함시킴 스레드 그룹 이름 얻기 ThreadGroup group = Thread.currentThread().getThreadGroup(); String groupName = group.getName(); 스레드 그룹 예제 public static void main(String[] args) { ThreadGroup group = Thread.currentThread().getThreadGroup(); //System.out.println(group.getName()); AutoSaveThread auto..
우리는 흔히 insert 작업을 할때 (Oracle 기준입니다.) insert into tbl_board(bno, title, content, writer) values(seq_board.nextval, #{title},#{content},#{writer}) 위와 같이 insert를 할 것이다. bno 컬럼은 sequence 객체의 값이 들어가는 자리로 VO가 있다면 vo에 저장되어 넘어가지 않고 sequence 객체의 nextval 함수를 통해서 실행될 것이다. 그런데 만약, 자동으로 추가된 PK 값을 확인해야 하는 상황이 온다면 어떻게 할까요? - sequence 객체의 currentval 함수를 이용하면 앞으로 들어갈 PK 를 확인할 수 있는데. 임의의 갯수 임의의 번째 실행이라면? 제약사항이 있다..
템플릿 메소드 패턴 - 알고리즘 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴 - 구현하려는 기능이 일정한 프로세스가 존재한다. - 구현하려는 기능이 사용하는 알고리즘이 추후 변경가능성이 있다. 템플릿 메소드 패턴을 위한 단계 1. 구현하려는 기능의 필요한 여러가지 단계를 확인. 2. 각각의 단계를 메소드로 분리 선언 3. 수행할 템플릿 메소드를 생성. 4. 하위 클래스에서 구현. 예제로 확인 추상 클래스 선언! public abstract class AbstGameConnectHelper { //외부에 노출되면 안됨. //보안과정 protected abstract String doSecurity(String string); //인증과정 protected a..
Adapter 패턴 - 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다. - 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 예제 public class Math { //두배 public static double twoTime(double num) {return num*2;} //절반 public static double half(double num) {return num/2;} //강화된 알고리즘으로 빠른 두배 계산. public static Double doubled(Double d) {return d*2;} } - 다음과 같이 이미 구현된 기능이 존재할 때, Math 클래스에 정의된 알고리즘을 이용하여 float 타..
스레드 상태제어 - 실행중인 스레드의 상태를 변경하는 것. - 메소드로 주로 제어 - interrupt(), sleep(), join(), wait(), yield() notify(), notifyAll() 등의 메소드가 존재. - 이중 notify(), notifyAll(), wait() 메소드는 Object 클래스의 메소드이고 나머지는 Thread 클래스의 메소드. 일정시간동안 일시정지 : sleep() - 실행중인 스레드를 일시정지. - 매개값으로 밀리초를 넣어주면 해당 시간동안 sleep() 메소드를 만나는 스레드는 일시정지함. - 일시정지 상태에서 interrupt() 메소드를 호출할 경우 InterruptedException이 발생됨. try{ Thread.sleep(1000); //1초간 일..
안드로이드는 맨처음 MainActivity에서 onCreate 메소드가 실행됨. 버튼을 클릭해서 액티비티를 전환하고자 한다면. 버튼에 클릭이벤트를 걸어야함. 그때 액티비티 이동하는 소스를 넣어준다. public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn1 = findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener(){ @Ov..
ContextLoaderListener - 해당 웹 어플리케이션이 구동시 같이 동작, web.xml에 default로 기재되어 있음. contextConfigLocation /WEB-INF/root-context.xml /WEB-INF/root-context2.xml ... org.springframework.web.context.ContextLoaderListener 이런식으로 여러가지의 설정파일을 등록시킬 수 있음 DispatcherServlet - Front-Controller 라고도 불림. - 웹 관련 처리의 준비작업을 함. XmlWebApplicationContext를 이용해서 servlet-context.xml 파일을 로딩하고 해석함. - 마지막 ViewResolver를 통해서 만들어진 응답데..