2013. 7. 29. 18:05

thread : 프로그램의 흐름

프로그램을 실행하면, main()메서드가  호출되어 하나의 흐름인 메인 스레드가 시작된다.


흐름이 하나밖에 없는 프로그램을 싱글 스레드.

Java에서는 흐름을 여러개 만들어 동시에 실행할 수 있는데 이처럼 흐름이 여러개 있는 프로그램을 멀티 스레드라 한다.





Thread를 생성하는 방법은 두가지가 있는데 runnable 인터페이스를 implements 하거나
Thread 클래스를 extends하는 방법이 있다

Thread 클래스
Java에서 멀티 스레드를 수행하기 위해서는 Thread클래스를 이용하여 새로운 스레드를 만들어줘야한다.
스레드를 만들기 위해서는 우선 Thread클래스를 상속받는 클래스를 작성하고 run()메소드를 오버라이딩 해준다.
그리고 그 안에 처리할 내용을 기술한다.



 class HelloThread extends Thread(){
public void run(){   // run 메소드 실행

}
}

스레드의 작성과 실행은 다음과 같이 한다.


HelloThread h = new HelloThread();
h.start();       // start()메소드 실행 시킨다

package thread;

public class tickTack extends Thread{
    private String word;
    private int time;
    private int count;
    
    public tickTack(String w, int t, int c) {
        word = w;
        time = t;
        count = c;
    }
    
    @Override
    public void run() {       // 스레드 클래스의 run 메소드를 오버라이딩한다.
        for (int i = 0; i < count; i++) {
            System.out.println(word);
            try {
                Thread.sleep(time);
            } catch (Exception e) {

            }
            
        }
    }

    
    public static void main(String[] args){
        tickTack tt = new tickTack("안녕", 1000, 4);   // 생성자를 사용해 호출,  안녕을 1000만큼 sleep, 4번 출력
        tickTack tt2 = new tickTack("Hello", 1000, 3); // 생성자를 사용해 호출,  Hello를 1000만큼 sleep, 3번 출력
        tickTack tt3 = new tickTack("하이", 1000, 3);  // 생성자를 사용해 호출,  하이를 1000만큼 sleep, 3번 출력
        
        tt.start();
        try {
            Thread.sleep(500);        // 0.5 지연
        } catch (Exception e) {
            // TODO: handle exception
        }
        tt2.start();
        try {
            Thread.sleep(500);        // 0.5 지연
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        tt3.start();
        
    }
    
    
}



안녕

Hello
하이
안녕
Hello
하이
안녕
Hello
하이

안녕

 

'java' 카테고리의 다른 글

Iterator  (0) 2013.07.29
Properties  (0) 2013.07.26
Arrays  (0) 2013.07.25
File  (0) 2013.07.25
Class  (0) 2013.07.25
Posted by 1+1은?
2013. 7. 29. 17:33

출처 : http://www.zetswing.com/bbs/board.php?bo_table=MySQL_LEC&wr_id=40


특정 컬럼으로 그룹핑(group by)을 할때 그룹별 제한하기

 

그룹별 출력 쿼리를 사용할때 조건을 제한 할때는 having을 사용합니다.

having 이라는 예약어를 사용하여 그룹별 제한이 가능합니다.

 


mysql> select code,count(*) from goods group by code;
--code별로 그룹을 짓고 모든 코드와 그룹별코드의 갯수를 출력한다.
mysql> select code,count(*) from goods group by code having count(*) = 1;
--code별로 그룹을 짓고 그룹코드갯수가 1인 코드와 그룹별코드의 갯수를 출력한다.


 

※ having절에는 그룹함수가 옵니다.


'DBMS > MySQL' 카테고리의 다른 글

MySQL 한글깨짐  (0) 2013.07.30
숫자관련 데이타형에 문자형식으로 insert하기  (0) 2013.07.29
Mysql에서의 null값 고찰  (0) 2013.07.29
MYSQL 성능 향상 정리  (0) 2013.07.29
초급QUERY  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 17:32

보통 SQL에서는 데이타를 입력할때 문자관련 데이타형에는 ''을 앞뒤에 붙이고 숫자관련 데이타형에는 ''을 안붙이고 놓습니다.

하지만 mysql에서는 숫자관련 데이타를 입력할때 ''을 붙여도 mysql에서 알아서 입력해줍니다.

''을 붙여서 입력하게되면 예외처리도 처리해줍니다. 아래의 예를 봅시다.

 

mysql> desc leejunsik;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| a      | int(11)  | YES |      | NULL    |        |
+-------+---------+------+-----+---------+-------+


insert into hong values('13');
--13이 정상적으로 입력됩니다.
 insert into hong values('1A');
--1만 입력됩니다.
 insert into hong values('AA');
--0이 입력됩니다.
 insert into hong values(AA);
--에러가 납니다.
 insert into hong values('');
--0이 입력됩니다.



'DBMS > MySQL' 카테고리의 다른 글

MySQL 한글깨짐  (0) 2013.07.30
MYSQL 에서 그룹함수(group by)  (0) 2013.07.29
Mysql에서의 null값 고찰  (0) 2013.07.29
MYSQL 성능 향상 정리  (0) 2013.07.29
초급QUERY  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 17:31

출처 : http://www.zetswing.com/bbs/board.php?bo_table=MySQL_LEC&wr_id=46


1.null값이란?

 

RDBMS에서 null 은 0이나 공백이 아닌 값을 알수가 없다입니다. 이말은 값이 없다 입니다.

이는 Mysql상에서 문자열을 합치거나 수치를 계산할때 문제가 됩니다. 특히 수치계산일때는 not null로 하거나 defailt 옵션을 주어야 합니다.

 

2.null값의 잘못된 처리

 

수치의 경우

cretae table lee(

a int null,

b int null);

insert into lee values(null,12);

select a+b from lee;

라고 한다면 12가 나올것 같지만 null값이 포함된 계산식은 무조건 null이 나옵니다.

그래서 defailt 문을 써주는게 좋거나 not null을 사용하는게 좋습니다.

 

문자열의 경우

cretae table lee(

a varchar(10) null,

b varchar(10) null);

insert into lee values(null,'lee');

select concat(a,b) from lee;

라고 한다면  nulllee나 lee가 나올것 같지만 결과는 null로 나온다.

 

3.많은 양의 null처리

 

상당히 많은 양의 레코드에 null이 있다면 계산하거나 문자열을 연결하는데 문제가 많다.

update table_name set num=0 where num is null;

update table_name set num='' where num is null;

와같이 null값을 지정된 문자나 숫자로 바꾸어준다.

 

※ table을 만들시에 모든컬럼에 not null을 주는게 좋습니다.

'DBMS > MySQL' 카테고리의 다른 글

MYSQL 에서 그룹함수(group by)  (0) 2013.07.29
숫자관련 데이타형에 문자형식으로 insert하기  (0) 2013.07.29
MYSQL 성능 향상 정리  (0) 2013.07.29
초급QUERY  (0) 2013.07.29
JOIN(조인) 사용하기  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 17:29

출처 : http://www.zetswing.com/bbs/board.php?bo_table=MySQL_LEC&wr_id=47


1.TABLE 관련

 

OPTIMIZE TABLE

table type이 myisam이나 bdb에서 사용하며 많은양의 데이터가 삭제되었거나 삽입되었을때 사용하면 속도향상에 좋습니다.

ex)optimaze table table_name;

 

2.QUERY 관련

 

JOIN

join이 subquery보다 빠르다.
join시 사용되는 컬럼은 동일한 column type과 길이를 가져야만 최적의 속도를 보장한다.

 

index설정

인덱스를 적절히 잡아줍니다.

 

필요한 컬럼만 select 한다.

select * 되어 있는부분을 필요할 필드만 가져옵니다.

 

processlist로 실행 쿼리를 mysql상태를 체크

cd /usr/local/mysql
./bin/mysqladmin -i3 processlist -ppassword

//3초에 한번씩 실행됩니다.

 

잘못된 query 발견

explain으로 질의과정 점검 몇번의 레코드를 검색하여 수행하는지 그리고 해당 컬럼이 index를 잘타는지 보고 쿼리를 수정합니다.

 

slow query log기능

 slow query log를 걸어놓고 slow query time를 한 5초로 정해주시면 5초 이상 실행이 걸리는 쿼리는 모조리 로그에 남습니다.
그 query를 튜닝합니다.(explain이용)

 

query우선 설정

select 구문에는 
select HIGH_PRIORITY id,name, ... from table_name ...

delete, insert, update 구문에는
delete LOW_PRIORITY from table_name ....

 

mysql 4.x 이상부터 지원! 

query cache을 사용합니다.

 

int형과char형의 검색속도차이

int 가 char보다는 검색속도가 더 빠르다고 하지만 시스템구성과 환경마다 다릅니다.

 

3.하드웨어 관련

 

웹호스팅이 아닌 서버호스팅을 합니다.

 

평균 조회 레코드 50만건이상

조회 데이타가 50만건~100만건이면 DB서버와 웹서버를(이미지 서버등등) 나누어 분산처리(2-Tier)하며 조회 건수가 100만건 이상은 ORACLE같은 상용 DB로 교체해야 한다.

 

메모리를 증설 합니다.

1-2G 정도

 

하드디스크 스카시로 교체

e-ide보다 데이타 io(입/출력) 더 빠르다.(10000 rpm이상급)

'DBMS > MySQL' 카테고리의 다른 글

숫자관련 데이타형에 문자형식으로 insert하기  (0) 2013.07.29
Mysql에서의 null값 고찰  (0) 2013.07.29
초급QUERY  (0) 2013.07.29
JOIN(조인) 사용하기  (0) 2013.07.29
4.0 추가기능  (0) 2013.07.29
Posted by 1+1은?