JAVA 20일차(221118)

점햠미·2022년 11월 18일
0

JATBAP'S JAVA

목록 보기
20/22
post-thumbnail

1. 프로세스와 쓰레드의 차이점은?




출처 : https://velog.io/@hsjung2015/JAVA%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

2.쓰레드에서 동기화란 무엇인가?


출처 : https://math-coding.tistory.com/174#:~:text=%EC%93%B0%EB%A0%88%EB%93%9C%20%EB%8F%99%EA%B8%B0%ED%99%94%EB%9E%80%20%EC%97%AC%EB%9F%AC%20%EC%93%B0%EB%A0%88%EB%93%9C,(lock)%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%A9%EB%8B%88%EB%8B%A4

3. 아래가 돌아 가도록 구현하시오.

main(){

ThreadCount threadCount = new ThreadCount();

threadCount.start();String input = JOptionPane.showInputDialog("아무 값이나 입력하세요."); 

System.out.println("입력하신 값은 " + input + "입니다.");

}

=============================================

10 9 8 7 6 ...1초마다 실행 되도록 쓰레드를 완성하시오.
import javax.swing.JOptionPane;

public class ThreadEx7 {
	public static void main(String[] args) {
		System.out.println(Thread.currentThread().getName());

		Thread th = new Thread(new ThreadEx7_1());	
		th.start();
		
		String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
		System.out.println("입력하신 값은 " + input + "입니다.");
	}
}
class ThreadEx7_1 implements Runnable{
	public void run() {
		System.out.println(Thread.currentThread().getName());
		
		for (int i = 10; i > 0; i--) {
			System.out.println(i);
			try { Thread.sleep(1000); } catch (Exception e) {}
		}
	}	// run()
}

4. IO 스트림에 대하여 설명하시오.



5. IO 스트림을 이용하여 아래와 같이 프로그램을 완성하시오.

=================
대상 파일: a.java
사본 이름: x:\b.java
파일 복사가 되었습니다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;

public class ByteFileCopier {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("대상 파일 : ");
		String src = sc.nextLine();
		System.out.print("사본 이름 : ");
		String dst = sc.nextLine();
		
		try(InputStream in = new FileInputStream(src);
			OutputStream out = new FileOutputStream(dst)) {
			int data;
			while(true) {
				data = in.read();
				if(data == -1)
					break;
				out.write(data);
			}
		}
		catch(IOException e) {
			e.printStackTrace();
		}
		System.out.println("파일 복사가 되었습니다.");
	}
}

6.try catch resource 에 대하여 설명하시오.



출처 : https://hianna.tistory.com/546

7. 아래에서 balance 가 음수값이 나오는 이유를 설명하시오.(중요)

class Account {
	private int balance = 1000;

	public  int getBalance() {
		return balance;
	}

	public void withdraw(int money) throws InterruptedException{
		
		if(balance >= money) {
			//try { 
			Thread.sleep(1000);
			//} catch(InterruptedException e) {}
			balance -= money;
		}
	} // withdraw
}

class RunnableEx21 implements Runnable {
	Account acc = new Account();

	public void run() {
		while(acc.getBalance() > 0) {
			// 100, 200, 300중의 한 값을 임으로 선택해서 출금(withdraw)
			int money = (int)(Math.random() * 3 + 1) * 100;
			try {
				acc.withdraw(money);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("balance:"+acc.getBalance());
		}
	} // run()
}


class ThreadEx21 {
	public static void main(String args[]) {
		Runnable r = new RunnableEx21();
		
		new Thread(r).start(); 
		new Thread(r).start(); 
	}
}
public void withdraw(int money) throws InterruptedException{
		
		if(balance >= money) {
			//try { 
			Thread.sleep(1000);
			//} catch(InterruptedException e) {}
			balance -= money;
		}
	} // withdraw
}

이 부분에서 Thread.sleep(1000)때문에 딜레이가 생겨서 이미 돈이 빠져나갔는데 한번 더 빠져나가서 -값이 출력된다. 라고 옆자리 쿠마상이 설명해주셨습니다. 난 글러먹었어.

profile
인생 망함 개조빱임

0개의 댓글