쓰레드

cpu내에서 독립적으로 실행되는 실행단위
- 데몬 스레드 : 그라운드에서 실행되는 스레드
- 사용자 스레드 : 사용자가 직접 정의한 스레드

쓰레드 작성(사용자 스레드)
 
1.Thread 클래스를 상속 - extends Thread

class ThreadA extends Thread  {  // Thread 클래스로부터 상속
public void run() {
    // 상위 클래스인 Thread 클래스의 run() 메소드를 오버 라이딩하여 스레드가 수행하여야 하는 문장들을 기술      
        }
}
 
2.Runnable 인터페이스를 구현 - implements Runnable 
 
class ThreadB implements Runnable {  // Runnable 인터페이스를 구현
public void run() {
    // Runnable는 run() 추상메소드만을 가진 인터페이스로 run()을 오버라이딩 해준다.
        }
}


쓰레드 실행 
   run()메소드를 재정의 
public void run() 
{
  쓰레드에 의해서 실행될 코드를 기술;
}
** start()메소드에 의해서 호출 ** 

쓰레드 객체를 생성
MyClass1  my1 = new MyClass1();
my1.start();
MyClass2 my2 = new MyClass2();
Thread  mythred = new Thread(my2);
mythread.start();

쓰레드 생성자

Thread () , Thread (String  name)  
Thread로 생성할 경우
Thread (Runnable Thread_name) , Thread (Runnable Thread_name, String  name) 
Runnable는 인터페이스로 스스로 일을 할 수 없으므로 Thread로 선언하여 Runnable 값을 넣어준다. 
 
 


 쓰레드의 실행을 일정시간 정지 
   public void sleep(int m) 
throws InterruptedException

  try{
Thread.sleep(1000);
  }catch(Exception e) { }


쓰레드 우선순위 설정

스레드명.setPriority(아래 값 입력)
static final int MAX_PRIORITY        – 10값
static final int MIN_PRIORITY           – 1값
static final int NORM_PRIORITY     – 5값 
또는 상수 (1~10사이값)을 넣어 우선순위를 정한다.

* 우선순위는 실행할 순서를 되도록 우선적으로 사용할 순위를 정하는것, 절대우선순위는 아니다. 



 
























'Programming > Java' 카테고리의 다른 글

컬렉션  (0) 2012.02.10
직렬화(Serialize)  (0) 2012.02.07
예외 처리 (Exception)  (0) 2012.01.11
이클립스 단축키 (펌)  (0) 2011.03.23
ArrayList 와 LinkedList 의 속도 차이와 사용용도 구분 예제  (0) 2011.02.21

출처 : http://blog.daum.net/sadest/15853467

아무튼 내가 즐겨 사용하고 있으며, 유용한 이클립스의 단축키는 이러한 것들이 있다.

Ctrl + 1 : 빠른 교정 
문맥에 맞는 소스코드의 교정을 도와준다. 예를 들어 인터페이스를 구현하는 클래스에서 인터페이스에서 선언된 메소드를 구현하고 있지 않을 때, 빨간색 에러가 표시되는데 구현 클래스 명에서 이 단축키를 적용하면 인터페이스에 선언된 메소드의 원형이 구현 클래스에 추가된다.


Ctrl + Shift + O : import!!문 자동 생성

자동으로 import!!문을 추가해 준다. 그것도 패키지 유형의 분류에 따라. 예를 들어 java.net.URL 클래스를 사용하고자 어딘가에서 URL url = new URL("http://..."); 이런식으로 작성했을 경우, import!!문을 통해 URL이라는 클래스가 인식되지 않기 때문에 에러가 표시되지만 이 단축키를 적용하게 되면 자동으로 문맥에 맞는 import!!문이 삽입된다. 만약 동일한 이름의 클래스가 여러 개 있을 경우 적절한 패키지를 선택할 수 있는 대화상자가 나타난다.


Ctrl + Space bar : Content Assist

따로 설명이 필요없을 듯.


Alt + Shift + R : 이름변경(클래스, 패키지, 변수, 메소드 등등...)

나는 변수명이나 클래스명, 패키지명, 메소드명 등을 상당히 자주 바꾸는 타입이다. 문맥에 맞지 않거나 조금 의미가 약한 경우 여지없이 이 단축키를 눌러댄다. 거의 Content Assist 만큼이나 자주 쓰는 단축키. 자동으로 참조 정보까지 변경해 주기 때문에 너무 편리하다. ^^


Alt + Shift + V : 이동(클래스, 인터페이스 등..)

역시나 이름변경 단축키와 함께 자주 사용되는 단축키이다. 해당 자원을 원하는 곳으로 이동할 수 있게 해주며, 역시나 자동으로 참조 정보까지 변경해 준다.


Ctrl + Page Up / Ctrl + Page Down : 좌/우 창 이동

코드 편집 창에 여러개의 창이 띄워져 있을 경우, 각 창 사이를 이 단축키로 왔다리 갔다리 할 수 있다.


F3 : 선언 위치로 이동

이 단축키를 눌러 변수의 경우에는 변수가 선언된 위치로, 메소드의 경우에는 메소드의 본문이 있는 곳으로 이동할 수 있다.


Alt + ↑ / ↓ : 줄 위치 바꿈

문장의 위/아래 위치를 바꾼다. 즉 한 라인을 위로 올리고 싶을 경우, Alt + ↑를 눌러 이동시킬 수 있다.


Ctrl + D : 한줄 삭제

현재 커서가 위치한 라인 전체를 삭제한다.


Ctrl + Shift + Delete : 현재 위치에서 라인 끝까지 삭제

현재 커서가 위치한 곳에서부터 그 라인의 마지막까지의 내용을 삭제한다.


Ctrl + J : Incremental Find

이 단축키를 누르게 되면, 이클립스 창의 하단 상태 표시줄 부분에 Incremental Find라고 표시되며, 한글자씩을 누를 때마다 그곳에 입력된 글자가 보이고 코드내의 일치하는 문자열로 이동하게 된다. 입력을 끝내고 다시 Ctrl + J를 누르면 그 문자열과 일치하는 곳으로 커서가 이동하게 된다.


Alt + Shift + S : Source 메뉴

아래와 같은 source 메뉴의 메뉴가 퀵 메뉴로 나타난다.
사용자 삽입 이미지



Ctrl + / : 주석처리 토글

현재 라인을 주석처리 하거나 주석처리된 부분의 주석을 제거해 준다.


'sysout' + (Ctrl + Space) : System.out.println() 문장 삽입

출력결과 확인할 때 상당히 편리하다. ^^;;


Alt + Shift + Z : Surround With 메뉴

코드를 블록으로 선택한 다음 이 단축키를 적용하면 다음과 같은 퀵 메뉴가 나타나며 선택한 문장으로 블록으로 선택했던 문장들을 감싼다.


사용자 삽입 이미지



Ctrl + Shift + F : 코드 포맷팅

코드의 내용을 문법 템플릿에 맞게 포맷팅 해준다. 자바 표준 코딩 스타일을 준수시켜 줄 때 좋다. ^^


Ctrl + F11 : 마지막 Run 구성 실행

마지막으로 실행시켰던 Run 구성을 실행시킨다.

Ctrl + Alt + ↓ : 한줄 복사후 붙여넣기

이 단축키를 적용하게 되면 현재 커서가 위치한 라인의 문장 전체를 복사해서 바로 아랫줄에 붙여넣는다. C&P 하던 것보다 간편하다.


Ctrl + Shift + X : 대문자로 / Ctrl + Shift + Y : 소문자로

 

===== 단축키 =====

▶ Ctrl + Shift + F ⇒ 자동 줄맞춤.

▶ Ctrl + W ⇒ 창 끄기.

▶ Ctrl + Shift + F4 ⇒ 모두 닫기.

▶ Ctrl + Shift + L ⇒ 모든 단축키 보기.

▶ Ctrl + 1 ⇒ 에러 자동 해결.

▶ Ctrl + Spacebar ⇒ 문장 자동 완성.

▶ Ctrl + L ⇒ 창에 숫자 입력->원하는 라인으로 이동.

▶ Shift + Alt + R ⇒ 같은 이름 모두 바꾸기.

▶ 블록지정 +Shift + Alt + Z ⇒ 관련된 여러 가지 기능 문들 나옴.

▶ Ctrl + Shift + F ⇒ 알아서 정렬.

▶ Ctrl + Shift + / , \ ⇒ 블록 주석, 풀기.

▶ Ctrl + O ⇒ 해당 소스의 메소드 리스트를 확인

▶ Ctrl + T ⇒ 계층 구조 보기

▶ Ctrl + / ⇒ 한줄 주석

▶ Ctrl + D ⇒ 한줄 삭제

▶ Ctrl + Alt + 방향키 ⇒ 아래나 위 로 하면 그줄이 복사가 된다.

 

 

===== 에디터 변환 =====

▶ 에디터가 여러 파일을 열어서 작업중일때 Ctrl + F6 키를 누르면 여러파일명이 나오고 F6키를 계속 누르면 아래로

 Ctrl + Shift + F6 ⇒ 키를 누르면 위로 커서가 움직인다.

▶ Ctrl + F6 ⇒ Tab기능(파일단위 이동).

▶ Ctrl + F7 ⇒ 뷰간 전환

 Ctrl + F8 ⇒ 퍼스펙티브간 전환

 F12 ⇒ 에디터로 포커스 위치 

▶ Alt +방향키 ⇒ 소스코드 네비게이션(순서대로 나타나고 닫은창도 버퍼안 있으면 살아남)

▶ Ctrl + F6 ⇒ 소스코드 네비게이션

▶ Ctrl + F7 ⇒ 뷰간 네비게이션

▶ Ctrl + F8 ⇒ 모드(Perspective)창 간의 네비게이션

▶ Ctrl + 마우스커서(혹은 F3) ⇒ 클래스나 메소드 혹은 멤버를 상세하게 검색하고자 할때

 

 

===== 실행 =====

▶ Ctrl + F11 ⇒ 바로 전에 실행했던 클래스 실행.

▶ Shift +Alt + X ⇒ 실행에 관련 된 단축키 나옴

(⇒ 애플릿실행, ⇒ 서버실행, ⇒ 어플리케이션실행).

▶ Ctrl +Alt +H ⇒ Call Hierarch.

▶ Run - Run Configurations - Arguments tab - program arguments (매개변수 넣기)

 

===== 문장 자동 기능 사용 시 키워드 =====

▶ sysout ⇒ System.out.println()

▶ try ⇒ try~catch문 완성.

▶ for ⇒ for문 완성 배열에 관련된 변수가 조건문 알아서 들어감.

▶ do ⇒ do~while문 완성.

▶ while ⇒ while문 완성.

 

 

===== 중요하진 않지만 알아두면 유용한 팁 =====

▶ F2 ⇒ 컴파일 에러의 빨간줄에 커서를 갖져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공.

▶ F4 ⇒ 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.

▶ Ctrl + Shift + Space ⇒ 메소드의 가로안에 커서를 놓고 이 키를 누르면 파라미터 타입 힌트를 볼 수 있다.

 

 

 

===== 문자열 찾기 =====

▶ Ctrl + K ⇒ 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.

▶ Ctrl + Shift + K ⇒ 역으로 찾고자 하는 문자열을 찾아감.

▶ Ctrl + J ⇒ 입력하면서 찾을 수 있음.

▶ Ctrl + Shift + J ⇒ 입력하면서 거꾸로 찾아갈 수 있음.

▶ Ctrl + F ⇒ 기본적으로 찾기

 

 

===== 이클립스 기본 설정 =====

▶ Windows - Preferences - Java - Editor - Syntax Coloring - java==>

- Keyword 'return' , Keywords excluding 'return' = (blue)

- Classes - (red)

▶ Windows - Preferences - General - Appearance - Colors and Fonts - Basic -

Text Font ->Tahoma,Verdana, 굵게, 크기12로 조정

'Programming > Java' 카테고리의 다른 글

컬렉션  (0) 2012.02.10
직렬화(Serialize)  (0) 2012.02.07
예외 처리 (Exception)  (0) 2012.01.11
Thread  (0) 2012.01.10
ArrayList 와 LinkedList 의 속도 차이와 사용용도 구분 예제  (0) 2011.02.21




import java.util.*;

public class SpeedTest {

	public static long add( List list ) // 순차적인 삽입.
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0 ; i<100000 ; i++)
		{
			list.add(i+"");
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
	}
	
	public static long add2( List list ) // 중간에 삽입
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0 ; i<100000 ; i++)
		{
			list.add(1000 , "a"); // 100번째 에 삽입
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
	}
	
	public static long remove(List list)
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0 ; i<100000 ; i++)
		{
			list.remove(500);
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
		
	}
	public static long remove2(List list)
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = list.size()-1 ; i>0 ; i--)
		{
			list.remove(i);
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
		
	}
	public static long access(List list)
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0; i<1000 ; i++)
		{
			list.get(i);
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
	}
	public static void main(String[] args)
	{
		
		ArrayList al = new ArrayList( 1000000 );	
		LinkedList ll = new LinkedList();
		
		
		
		System.out.println("순차적으로 삽입하는 시간");
		System.out.println("Arraylist " + add(al));
		System.out.println("LinkedList " + add(ll));
		//순차적일 경우는 arraylist 가 빠르다.
		
		
		System.out.println("중간에 추가하는 시간");
		System.out.println("Arraylist " + add2(al));
		System.out.println("LinkedList " + add2(ll));
		//중간에 추가할경우 LinkedList 가 빠르다 훨신!
		
		System.out.println("접근시간 테스트");
		System.out.println("Arraylist " + access(al));
		System.out.println("LinkedList " + access(ll));
		
		
		System.out.println("중간에서 삭제하기");
		System.out.println("Arraylist " + remove(al));
		System.out.println("LinkedList " + remove(ll));
		//중간에 삭제할경우 LinkedList 가 빠름
		
		
		System.out.println("순차적으로 삭제하기");
		System.out.println("Arraylist " + remove2(al));
		System.out.println("LinkedList " + remove2(ll));
		//순차적삭제는 Arraylist가 빠름

		

		
	}
}

1. 순차적으로 추가/삭제하는경우에는 ArrayList가 LinkedList보다 빠르다

2. 중간에 데이터를 추가.삭제 하는경우에는 LinkedList가 ArrayList 보다 훨씬! 빠르다. 

3. 특정요소에 접근할 경우에는 Arraylist가 빠르다.

배열의 경우 n번째 요소에 접근할 경우 아래와 같은 수식으로 접근하기 때문에 빠르다.

n번째 요소의 주소 = 배열의 주소 + n * 데이터 타입의 크기.


'Programming > Java' 카테고리의 다른 글

컬렉션  (0) 2012.02.10
직렬화(Serialize)  (0) 2012.02.07
예외 처리 (Exception)  (0) 2012.01.11
Thread  (0) 2012.01.10
이클립스 단축키 (펌)  (0) 2011.03.23

+ Recent posts