2015년 10월 21일 수요일

150923 쓰레드 윈도우 프로그래밍

150923 쓰레드 윈도우 프로그래밍
****Thread  -  한 작업

1) processs program   파일이 저장만 되어있으면 프로그램, 실행이 되면 프로세스

2) 단일 프로세스 멀티프로세스


3) 하나의 프로세스 에서 실횅하는 작업 단위

4) 멀티쓰레드 - 

5) 모든프로그램은 반드시 하나이상의 쓰레드를 포함
-main():메인쓰레드

6) 스레드 구현방식  
1. runnable
2. Thread 클래스

7) LifeCycle

8) 동기화 (Synchronize)
1) 세마포어 ,뮤텍스
2) synchronized
- 메서드 에서만 사용
- block 사용 
synchronized (객체주소){
코드...
}

9) 스레드의 종료
1) 우선순위 (메인스레드가 가장 나중에 종료할 수 있도록 유도 )
- isAlive() 
- join()
2) 종료방법 ( 강제 종료를 해야 할 경우 )
- stop()  // 전선 뽑는 급의 종료, 왠만하면 쓰지말아야할 메소드
- inturrupt() // stop 보다는 부드러운 종료
- 직접종료  // 직접 내손으로처리함




**********************************************************************************************************************************************************


windows programming
윈도우 프로그래밍


1. AWT (Abstract Window Toolkit )  -> Swing

2. 3요소
1) 재료 : component
- java.awt 패키지
- Button, Canvas, Checkbox, Choice, Container, Label, List, 
-container
panel                 
Applet
winldows
Dialog
Frame (크기 를 정하고 보여줄 수 있게 설정 )

dialog  common dialog(내장 다이얼로그, 시스템 다이얼로그)
user Definedialog ( dialog를 상속 )
Modal 과Modaless


2) 디자인 (배치) : LayOut
- 재료(component)를 원하는 위치에 배치
-레이아웃 매니저
FlowLayout
: 순서대로
: 패널

BorderLayout
: 테두리를 기준으로 배치 (동, 서, 남, 북, 중)
: window 의 기본 레이아웃
GridLayout
: 테이블 모양으로 배치
GridBagLayout
: 불규칙 테이블 모양으로 배치
CardLayout
: 보더레이아웃 처럼 배치를 해놓고 화면전환용 으로 이용가능

3) 동작 : Event

3. 분야
1)어플리케이션
2) 애플릿






============================================================================FlagTest
============================================================================


class StopThreadDemo2 extends Thread {
private boolean m_stopped = false;

@Override
public void run() {
try {
while (!m_stopped)

{
System.out.println("쓰레드 라이브");
sleep(500);
}

} catch (InterruptedException err) {
err.printStackTrace();
} finally {
System.out.println("쓰레드사망");
}

}

public void setStop() {

m_stopped = true;
}
}

public class FlagTest {

public static  void main(String[] args) throws InterruptedException {
// TODO 인터럽트 스탑 예제
System.out.println("********* Flag 를 이용한 종료 *********");
StopThreadDemo2 demo = new StopThreadDemo2();
demo.start();
Thread.sleep(5000);
demo.setStop();
}

}





============================================================================InterruptTest
============================================================================

class StopThreadDemo1 extends Thread {

@Override
public void run() {
try {
//while (true)
while(!Thread.currentThread().isInterrupted()) // 인터럽트 명령이 들어오면 끝내라
{
System.out.println("쓰레드 라이브");
sleep(500);
}

} catch (InterruptedException err) {
err.printStackTrace();
} finally {
System.out.println("쓰레드사망");
}

}

}

public class InterruptTest {

public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
System.out.println("******** 인터럽트 를 이용한 종료 *********");
StopThreadDemo1 demo = new StopThreadDemo1();
demo.start();
Thread.sleep(5000);
demo.interrupt();
}

}






============================================================================
 SynchronizeTest
============================================================================

class Toilet{
public synchronized void openDoor( String name, String key){ //  synchromized  - 동기화
System.out.println(name + "입장");
for (int i=0 ; i < 100000 ; i++){
if ( i ==5000)
System.out.println(name + "뿌우우우우우욱?!");
}
System.out.println(name + " : ㅇㅏ 시원해");
}
}

class Family extends Thread{ //가족별로 쓰레드 생성
Toilet toilet;
String who;
String key;
Family ( Toilet t, String w){
toilet = t;
who = w;

}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
toilet.openDoor(who, key);
}
}
public class SynchronizeTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Toilet toilet = new Toilet();
Family father = new Family(toilet,"아빠");
Family mother = new Family(toilet,"엄마");
Family brother = new Family(toilet,"형");
Family sister = new Family(toilet,"누나");
Family me = new Family(toilet,"나");

father.start();
mother.start();
brother.start();
sister.start();
me.start();
}

}




============================================================================
ThreadFinishOrder
============================================================================


class ThreadDemo6 extends Thread{
ThreadDemo6(String name){
super(name);
start();
}
@Override
public void run() {
System.out.println(getName() + " 자식 스레드 시작");
int cnt = 0;
do{
try {
sleep(500);
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + " count : " + cnt);
cnt++;
}while(cnt < 10);
System.out.println(getName() + " 자식 스레드 종료");
}
}

public class ThreadFinishOrder {
public static void main(String[] args) throws InterruptedException {
// TODO 스레드 예제3
System.out.println("메인 스레드 시작");
ThreadDemo6 t1 = new ThreadDemo6("first");
ThreadDemo6 t2 = new ThreadDemo6("second");
int cnt = 0;
do{
try {
Thread.sleep(200);
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(".");
cnt++;
}
while(cnt < 10); 
t1.join();
t2.join();
//while (t1.isAlive() || t2.isAlive() ); // isAlive 를 이용해서 자식스레드가 끝날때 까지 메인이 끝나지 않음
System.out.println("메인 스레드 종료");
}

}





============================================================================
CheckBoxTest 
============================================================================

package component;

import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.FlowLayout;
import java.awt.Frame;

public class CheckBoxTest extends Frame {
   Checkbox c1,c2,c3;
   Checkbox r1,r2;
   CheckboxGroup g;
   
   public CheckBoxTest(){
      c1 = new Checkbox("등산", true);
      c2 = new Checkbox("낚시");
      c3 = new Checkbox("여행");
      
      setLayout(new FlowLayout());
      
      add(c1);
      add(c2);
      add(c3);
      
      g = new CheckboxGroup();
      r1 = new Checkbox("남자",false,g);
      r2 = new Checkbox("여자",false,g);
      add(r1);
      add(r2);
   }
   
   public static void main(String[] args) {
      // TODO checkBox 컴퍼넌트 예제
      CheckBoxTest test = new CheckBoxTest();
      test.setSize(300,400);
      test.setVisible(true);
      
   }

}




============================================================================ChoiceTest 
============================================================================

package component;

import java.awt.Choice;
import java.awt.Frame;

public class ChoiceTest extends Frame{
   Choice c;
   
   ChoiceTest(){
      c = new Choice();
      c.addItem("홍길동");
      c.addItem("임꺽정");
      c.addItem("신돌석");
      
      add(c);
   }
   public static void main(String[] args) {
      // TODO Choice컴퍼넌트 예제
      ChoiceTest test = new ChoiceTest();
      test.setSize(300,400);
      test.setVisible(true);

   }


}




============================================================================
LableTest
============================================================================
package component;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

//
//public class LableTest {
//
//Label lab1, lab2, lab3;
//Frame f;
//
//LableTest(){
// lab1 = new Label("첫번째 라벨");
// lab2 = new Label("두번째 라벨");
// lab3 = new Label("세번째 라벨");
//
// f = new Frame ( "라벨 연습 프로그램 ");
// f.setLayout(new FlowLayout());
// f.add(lab1);
// f.add(lab2);
// f.add(lab3);
//
// lab1.setBackground(Color.magenta);
// lab2.setBackground(Color.lightGray);
// lab3.setBackground(Color.red);
//
// f.setSize(300,400);
// f.setVisible(true);
//
//}
// public static void main(String[] args) {
// // TODO lavel1 컴폰퍼트 클래스
//
// new LableTest();
// }
//
//}


public class LableTest extends Frame {
Label lab1, lab2, lab3;

LableTest(){
super ("레이블연습");
lab1 = new Label("첫번째 라벨");
lab2 = new Label("두번째 라벨");
lab3 = new Label("세번째 라벨");

setLayout(new FlowLayout());
add(lab1);
add(lab2);
add(lab3);
lab1.setBackground(Color.magenta);
lab2.setBackground(Color.lightGray);
lab3.setBackground(Color.red);
}
public static void main(String[] args) {
// TODO lavel1 컴폰퍼트 클래스
LableTest labTest = new LableTest();
//lableTest.setSize(300,400);
labTest.setBounds(10,10,300,400);
labTest.setVisible(true);
}

}



============================================================================ ListTest 
============================================================================
package component;

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.List;

public class ListTest extends Frame{
   List list1, list2;
   
   ListTest(){
      setLayout(new FlowLayout());
      
      list1 = new List(3,true);//true: 다중선택
      list2 = new List(3,false);//false: 단일선택
      
      list1.add("사과");
      list1.add("배");
      list1.add("포도");
      list1.add("감");
      list1.add("수박");
      
      list2.add("짜장면");
      list2.add("짬뽕");
      list2.add("군만두");
      list2.add("난자완스");
      list2.add("샥스핀");
      
      add(list1);
      add(list2);
   }
   
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      ListTest test = new ListTest();
      test.setSize(300,400);
      test.setVisible(true);
   }


}




============================================================================ TextTest
============================================================================
package component;

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;

public class TextTest extends Frame {
   
   TextArea ta;
   TextField tf;
   
   
   TextTest(){
      setLayout(new FlowLayout());
      
      ta = new TextArea("이것은 TextArea이다", 3, 30);
      tf = new TextField("이것은 TextField이다", 30);
      
      add(ta);
      add(tf);
   }
   
   
   
//***********************************************   
   
   public static void main(String[] args) {
      // TODO TextComponent예제
      TextTest test = new TextTest();
      test.setSize(300,400);
      test.setVisible(true);
   }

}



============================================================================
CommonDialog(
============================================================================
package container;

import java.awt.Button;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CommonDialog extends Frame implements ActionListener{
FileDialog fopen, fsave;
Panel p;
Button btnOpen, btnSave;
public CommonDialog() {
p = new Panel();
btnOpen = new Button("파일 열기");
btnSave = new Button("파일 저장");
fopen = new FileDialog(this, "파일 열기", FileDialog.LOAD);
fsave = new FileDialog(this, "파일 저장", FileDialog.SAVE);
p.add(btnOpen);
p.add(btnSave);
add(p);
btnOpen.addActionListener(this);
btnSave.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("파일 열기")){
fopen.setVisible(true);
System.out.println(fopen.getDirectory());
System.out.println(fopen.getFile());
}
else{
fsave.setVisible(true);
}
}
public static void main(String[] args) {
// TODO FileDialog 예제
CommonDialog common = new CommonDialog();
common.setSize(300, 400);
common.setVisible(true);
}

}




============================================================================
FrameTest
============================================================================
package container;

import java.awt.Button;
import java.awt.Frame;

public class FrameTest {
Button b;
Frame f;
FrameTest(){
f = new Frame();
b = new Button("눌러 주세요");
f.add(b);
f.setSize(200, 300);
f.setVisible(true);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
f.dispose();
}

public static void main(String[] args) {
// TODO Frame컨테이너 예제
new FrameTest();
}
}



============================================================================
PanelTest
============================================================================
package container;

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class PanelTest extends Frame implements ActionListener{
Panel p1, p2;
Button b1, b2, b3, b4;
PanelTest(){
setLayout(new FlowLayout());
p1 = new Panel();
p2 = new Panel();
b1 = new Button("패널2 보이기");
b2 = new Button("패널2 안보이기");
b3 = new Button("패널1 보이기");
b4 = new Button("패널1 안보이기");
p1.setBackground(Color.CYAN);
p2.setBackground(Color.LIGHT_GRAY);
p1.add(b1);
p1.add(b2);
p2.add(b3);
p2.add(b4);
add(p1);
add(p2);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
setSize(400, 500);
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(e);
//Button b = (Button)e.getSource();
//String lab = b.getLabel();
String lab = e.getActionCommand();
if(lab.equals("패널2 보이기")){
p2.setVisible(true);
}
else if(lab.equals("패널2 안보이기")){
p2.setVisible(false);
}
else if(lab.equals("패널1 보이기")){
p1.setVisible(true);
}
else{
p1.setVisible(false);
}
}
public static void main(String[] args) {
// TODO Panel 예제
new PanelTest();
}

}



============================================================================UserDialog
============================================================================
package container;

import java.awt.Button;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class MessageDialog extends Dialog implements ActionListener{
String message;
Button btnClose;
public MessageDialog(Frame f, String msg) {
super(f, "메시지 대화상자", true);
message = msg;
btnClose = new Button("종료");
btnClose.addActionListener(this);
}
public void dialogUI(){
Label lab = new Label(message);
add("North", lab);
add(btnClose);
setBackground(Color.LIGHT_GRAY);
setSize(300, 150);
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
}

public class UserDialog extends Frame implements ActionListener{
Panel p;
Button btnOpen, btnClose;
public UserDialog() {
p = new Panel();
btnOpen = new Button("다이얼로그 열기");
btnClose = new Button("종료");
p.add(btnOpen);
p.add(btnClose);
add(p);
btnOpen.addActionListener(this);
btnClose.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("다이얼로그 열기")){
MessageDialog md = new MessageDialog(this, "이것은 테스트 입니다.");
md.dialogUI();
}
else{
System.exit(0);
}
}
public static void main(String[] args) {
UserDialog user = new UserDialog();
user.setSize(500, 600);
user.setVisible(true);
}
}



============================================================================
BorderLayoutTest
============================================================================
package layout;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

public class BorderLayoutTest extends Frame{

Button b1,b2,b3,b4,b5;
public BorderLayoutTest(){

setLayout(new BorderLayout());
b1 = new Button( " 첫번째 버튼 " );
b2 = new Button( " 두번째 버튼 " );
b3 = new Button( " 세번째 버튼 " );
b4 = new Button( " 네번째 버튼 " );
b5 = new Button( " 다섯번째 버튼 " );

add("North",b1);
add("South",b2);
add("East",b3);
add("West",b4);
add("Center",b5);
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new BorderLayoutTest();

}

}






============================================================================
CardLayoutTest
============================================================================
package layout;


import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutTest extends Frame implements ActionListener{
CardLayout card;
Panel p1,p2;
Button btnPrev,btnNext;
Button b3, b4, b5;
public CardLayoutTest(){
p1 = new Panel();
p2 = new Panel();
btnPrev = new Button("prev page");
btnNext = new Button("next page");
card = new CardLayout();
b3 = new Button( " 1 - Page ");
b4 = new Button( " 2 - Page ");
b5 = new Button( " 3 - Page ");
p1.add(btnPrev);
p1.add(btnNext);
add("North", p1);
p2.setLayout(card);
p2.add("1", b3);
p2.add("2", b4);
p2.add("3", b5);
add(p2);
btnPrev.addActionListener(this);
btnNext.addActionListener(this);
 b3.addActionListener(this);
     b4.addActionListener(this);
     b5.addActionListener(this);
  }
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("prev page")){
card.previous(p2);
}
else{
card.next(p2);
}
}


public static void main(String[] args) {
CardLayoutTest card = new CardLayoutTest();
card.setSize(300,400);
card.setVisible(true);
}

}
 

============================================================================FlowLayoutTest 
============================================================================
package layout;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class FlowLayoutTest extends Frame{

Button b1,b2,b3,b4,b5;
public FlowLayoutTest(){

setLayout(new FlowLayout(0));
b1 = new Button( " 첫번째 버튼 " );
b2 = new Button( " 두번째 버튼 " );
b3 = new Button( " 세번째 버튼 " );
b4 = new Button( " 네번째 버튼 " );
b5 = new Button( " 다섯번째 버튼 " );

add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new FlowLayoutTest();

}

}
 



============================================================================GridLayoutTest
============================================================================
package layout;


import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

public class GridLayoutTest extends Frame{

Button b1,b2,b3,b4,b5;
public GridLayoutTest(){

setLayout(new GridLayout(2,3));//2행 3열로 배치
b1 = new Button( " 첫번째 버튼 " );
b2 = new Button( " 두번째 버튼 " );
b3 = new Button( " 세번째 버튼 " );
b4 = new Button( " 네번째 버튼 " );
b5 = new Button( " 다섯번째 버튼 " );

add("North",b1);
add("South",b2);
add("East",b3);
add("West",b4);
add("Center",b5);
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new GridLayoutTest();

}

}

댓글 없음:

댓글 쓰기