● Run()

- run()을 호출하는 것은 생성된 쓰레드를 실행시키는 것이 아니라 단순히 클래스내에 속한 메서드 하나를 호출하는 것이다.


● Start()

- start()는 run()과 달리 쓰레드가 작업을 실행하는데 필요한 호출스택(Call Stack)을 생성한 다음,

  run()을 호출해서, 생성된 호출스택에  run() 이 첫 번째로 저장되게 한다.

 모든 쓰레드는 독립적인 작업을 수행하기 위해 자신만의 호출스택을 필요로 하기 때문에, 새로운 쓰레드를 생성하고 

 실행시킬 때 마다 새로훈 호출스택이 생성되고 쓰레드가 종료되면 작업에 사용된 호출프택은 소멸된다.

1) main 메서드에서 쓰레드의 start 메서드 호출

2) start 메서드는 쓰레드가 작업을 수행하는데 사용될 새로운 호출스택을 생성

3) 생성된 호출스택에 run 메서드를 호출해서 쓰레드가 작업을 수항하도록 한다.

4) 이제는 호출스택이 2개이기 때문에 스케쥴러가 정한 순서에 의해서 변갈아 가면서 실행된다.


※ 결론은 start() 를 쓰는게 확실함.


'공부 > JAVA' 카테고리의 다른 글

JAVA_[ JVM의 메모리구조 ]  (0) 2015.02.10
JAVA_[Thread join()]  (0) 2015.02.09
JAVA_[ 리눅스 권한변경 ]  (0) 2014.12.26
JAVA_[ map의 Key, Value Iterator 으로 자동으로 불러오기 ]  (0) 2014.12.10
JAVA_[ EJB란? ]  (0) 2014.11.05

TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다.

TCP 와 UDP 모두 OSI 7계층의 전송계층에 해당하는 프로토콜이다.

TCP 와 UDP 는 전송방식이 다르며, 각 방식에 따른 장단점이 있다.


 항목

 TCP

 UDP

 연결방식

 연결기반(Connection - oriented)

 - 연결 후 통신(전화기)

 - 1:1 통신방식

 비연결기반(Connectionless - oriented)

 - 연결없이 통신(소포)

 - 1:1, 1:N, N:N 통신방식

 특징

 - 데이타 전송순서 보장

 - 데이타 수신여부 확인

 - 패킷을 관리할 필요가 없음

 - UDP 보다 전송속도가 느림

 - 데이타 전송순서 바뀜

 - 데이타 수신여부 확인불가

 - 패킷을 관리해주어야 한다

 - TCP 보다 전송속도가 빠름

 관련 클래스

 - Socket

 - ServerSocket

 - DatagramSocket

 - DatagramPacket

 - MulticastSocket

※ TCP 소켓통신시 포트의 번호는 0 ~ 65535 범위에 속하는 값인데 보통 1023번 이하의 포트는 TELNET/FTP 와 같은 기존의

다른 통신 프로그램들에 의해서 사용되는 경우가 많기 때문에 1023번 이상의 번호를 사용하는 것이 좋다.

- 오픈한 클래스 상위에 현재 소스 경로표시

  단축키 : ALT + SHIFT + B

  메뉴경로 : Navigate -> Show In BreadCrumb




Selector 

Comment 

 .animated

 선택상태가 실행되는 시점에서 진행 중인 애니메이션의 모든 엘리먼트를 선택

 :button

 버튼 엘리먼트를 선택

 :checkbox

 체크박스를 선택

 :checked

 체크박스 & 라디오 버튼 체크 또는 선택된 것들만 선택

 :contains(text)

 지정된 텍스트를 포함하는 모든 엘리먼트를 선택

 :disabled

 비활성화 상태인 엘리먼트를 선택

 :enabled

 활성화 상태인 엘리먼트를 선택

 :file

 파일타입 엘리먼트를 선택

 :has(selector)

 셀렉터와 일치한 최소 한개 이상의 엘리먼트를 포함하는 엘리먼트만 선택

 :header

 H1, H2, H3 등과 같은 헤더 모든 요소를 선택

 :hidden

 숨겨든 모든 요소를 선택

 :image

 이미지 타입의 엘리먼트를 선택

 :input

 패스워드 엘리먼트를 선택

 :not(selector)

 지정한 selector 와 일치하지 않은 엘리먼트를 선택

 :parent

 자식 엘리먼트를 가지는 엘리먼트를 선택

 :password

 패스워드 엘리먼트를 선택

 :radio

 라디오 버튼을 선택

 :reset

 리셋 버튼을 선택

 :selected

 선택된 모든 엘리먼트를 선택

 :submit

 전송 버튼을 선택

 :text

 텍스트 타입 엘리먼트를 선택

 :visible

 보이는 엘리먼트를 선택


ex)

$(document).ready(function() {

// id="el" 엘리먼트의 자식 li 태그 중 p 태그를 포함하는 엘리먼트를 찾아서 색깔변경

var el = $('#el > li:has(p)');

el.css('color', 'red');

});


<ul id="el">

<li>1</li>

<li>2</li>

<li>3</li>

<li<p>4</p></li>

<li>5</li>

<li>6</li>

<li>7</li>

<li>8</li>

<li>9</li>

</ul>


Selecter 

Comment 

 :first

 첫 번째 일치하는 엘리먼트를 선택 

 :last

 마지막으로 일치하는 엘리먼트를 선택

 :first-child

 각 리스트의 첫 번째 리스트 아이템을 반환

 :fast-child

 각 리스트의 마지막 리스트 아이템을 반환

 :only-child

 부모의 형제가 없는 자식인 엘리먼트를 선택

 :nth-child(n)

 부모의 n번째 자식인 모든 엘리먼트를 선택

 :even

 짝수 번째 엘리먼트를 선택

 :odd

 홀수 번째 엘리먼트를 선택

 :eq(n)

 일치하는 n번 'index'의 엘리먼트를 선택

 :gt(n)

 n번 'index'를 포함하지 않고 이후의 엘리먼트와 일치하는 엘리먼트를 선택(큰)

 :lt(n)

 n번 'index'를 포함하지 않고 이전의 엘리먼트와 일치하는 엘리먼트를 선택(작은)


ex)

$(document).read(function() {

// id="el" 하위 li 태그 중 첫 번째 엘리먼트 선택

var el = $('#el > li:first');

el.css('color', 'red');

});


<div>

2-1-1

<ul id="el">

<li>2-1-1-1</li>

<li>2-1-1-2</li>

<li>2-1-1-3</li>

<li>2-1-1-4</li>

<li>2-1-1-5</li>

</ul>

</div>

'공부 > JQuery' 카테고리의 다른 글

JQuery_[ input type="text" 입력시 3자리 콤마 자동찍기 ]  (0) 2015.03.17
JQuery_[상태 필터 선택자]  (0) 2015.01.29
JQuery_[ $.param() / serialize() ]  (0) 2014.08.26
JQuery_[ Scroll 이벤트 ]  (0) 2014.08.25
JQuery_[ $.extend() ]  (0) 2014.08.25

- JAVA 에서 폴더 생성시 권한 및 소유주 설정

String Folder = "/root/file";

String chmod = "chmod -R 755 " + Folder;

Runtime runtime = Runtime.getRuntime();

Process process = runtime.exec(chmod);

process.waitFor();


- chown 방법도 동일하다.


- 특정포트 사용확인(PID조회)

$ netstat -lntp | grep [port]

$ netstat- nap | grep [port]


- PID 는 모르는데 특정포트를 사용중인 프로세스 죽이기(root 로 해야함)

$ fuser -k -n tcp [port]




'공부 > UNIX & LINUX' 카테고리의 다른 글

LINUX_[ Too may open files ]  (0) 2014.11.10
LINUX_[ 수동 시간설정(DATE) ]  (0) 2014.11.03
LINUX_[ Vi(m) 단축키 ]  (0) 2013.03.15
UNIX_[find 명령어 사용법]  (0) 2012.09.19

DB SID, Service Name 차이별로 URL 입력할때 조금 차이가 있음.


- SID

   jdbc:oracle:thin:@dbIp:dbPort:dbSid


- SERVICE NAME

   jdbc:oracle:thin:@//dbIp:dbPort/dbServiceName


연계서비스 개발중에..

Client 쪽에서 XML 타입의 문자열을 보내주면 Map 으로 변환해서(XMLEncoder 이용)

내가 Map 안에 쿼리문과 파라미터를 받아서 Query 실행 후에 데이터를 다시 XML 타입으로 변환해서(XMLDecoder)

 보내줘야하는 거 만드는 중인데..


Map 까서 일일이 Client 와 Key 값 정의해서 Value 빼와서 세팅하기가 번거러운거 같아서 구글링!

Iterator() 로 이게 가능하다는걸 암! 잊어버릴까봐 남긴다.


일단 Client 에서 보내주는 Map 의 양식은 다음과 같다.

Key : "sql", Value(String) : "SELECT * FROM WHERE PARAM1 = ?, PARAM2 = ? PARAM3 = ?"

Key : "params" Value(Map) :

Key : PARAM1, Value: 값

Key : PARAM2, Value: 값

Key : PARAM3, Value: 값


* 우선 PrepareStatement 를 쓸것이고, Params 의 갯수는 모른다. 항상 같은 쿼리문이 들어오는 것이 아니라,(총 연계 3부분)

   연계마다 따로 서비스를 개발하면 일일이 Key 값을 넣어서 코딩하면 되겟지만.. 싫다.


여기서 부터 구현

// Class.forName, DriverManager.getConnection 은 생략한다.

// Client 에서 Map 이 "paramMap" 으로 온다고 가정

// 두개의 키값, "sql", "params" 는 변함이 없다.


String sql = String.valueof(paramMap.get("sql"));

HashMap<String, Object> sqlMap = (HashMap<String, Object>) paramMap.get("params");


Set<String> key = sqlMap.keySet();

int paramIndex = 1;


for( Iterator<String> iterator = key.iterator(); iterator.hasNext(); ) {

String paramsKey = String.valueOf(iterator.next());

String paramsVal = String.valueOf(sqlMap.get(paramsKey));

// sql Query 에 값 넣기

stmt.setString(paramIndex, paramsVal);

paramIndex++;

}


요렇게 하면, 자동으로 index 증가하면서 params 입력

주의점 : sql Query 입력해야 할 ? 의 순서와 갯수가, params 에 담겨있는 순서&갯수 가 같아야한다.

이건 구지 얘기안해도 알아야 될 것;;


이렇게 데이타 조회해서 Map 으로만든 다음 다시 -> XMLDecoder 로 변환해서 소켓으로 리턴하면 끝!


'공부 > JAVA' 카테고리의 다른 글

JAVA_[Thread start() & run()]  (0) 2015.02.06
JAVA_[ 리눅스 권한변경 ]  (0) 2014.12.26
JAVA_[ EJB란? ]  (0) 2014.11.05
JAVA_[ Dynamic Web Project 에서 Tomcat(Catalina) Home 경로 얻기 ]  (1) 2014.11.04
JAVA_[ transient ]  (0) 2014.10.31

- 에러내용

제목과 동일 : IOException while loading persisted sessions: java.io.EOFException 


- 원인

톰캣 시작시 톰캣 work 디렉토리의 Session.ser 파일을 복원하는 과정에서 에러발생


- 해결방법

Tomcat > work > 하위의 *.ser 파일을 삭제하고 다시 톰캣 재기동


- 경로 

일반적으로 CATALINA_HOME > work > Catalina > localhost > examples

                                                                                    > host-manager

                                                                                    > docs


세 디렉토리 밑에 있다. 찾아서 지우면 된다. 혹시나 모를때는 찾아서 지운다.

해당 파일 찾기 명령어

find -name '*.ser' 이걸로 찾아서 경로 확인하고 가서 지우면 끝'- '

'공부 > ETC' 카테고리의 다른 글

ETC_[ TCP 와 UDP ]  (0) 2015.02.05
ETC_[ SID, ServiceName 입력차이 ]  (0) 2014.12.15
ETC_[ Tomcat 다중 인스턴스 띄우기 ]  (0) 2014.11.06
ETC_[ Win7 Telnet 설정 ]  (0) 2014.11.04
ETC_[Apache Error Code]  (0) 2013.08.24

+ Recent posts