고급자바
-
File객체 만들기-22.03.31고급자바 2022. 3. 31. 17:21
File객체 만들기 연습 1. new File(String 파일 또는 경로명) => 디렉토리와 디렉토리 사이 또는 디렉토리와 파일명 사이의 구분문자는 '\'를 사용하거나 '/'를 사용할 수 있다. public class T01_FileTest { public static void main(String[] args) throws IOException { File file=new File("d:/D_Other/test.txt"); System.out.println("파일명: "+file.getName()); System.out.println("파일 여부: "+file.isFile()); System.out.println("디렉토리(폴더) 여부 : "+file.isDirectory()); System.out...
-
람다식-22.03.31고급자바 2022. 3. 31. 15:32
람다식=> 익명함수를 생성하기 위한 식 자바에서는 '매개변수를 가진 코드 블럭'=>런타임시 익명구현객체로 생성된다. 형식) 인터페이스명 객체변수명=람다식; 람다식의 형식) (매개변수들...) -> {처리할 코드들;...} => 람다식으로 변환할 수 있는 인터페이스는 추상메서드가 1개인 인터페이스만 가능하다. 이런 인터페이스를 '함수적 인터페이스'라고 한다. 이 함수적 인터페이스를 만들 때는 @FunctionalInterface로 지정한다. ->추상메소드1개만 갖는다 예로는 Runnable 의 run( ) 메소드이다. public class T01_LambdaTest { public static void main(String[] args) { //람다식을 사용하지 않는 경우 Thread th1=new Th..
-
wait(),notify()-22.03.31고급자바 2022. 3. 31. 13:37
wait() => 동기화 영역에서 락을 풀고 Wait-Set영역(공유객체별로 존재)으로 이동시킨다. notify() 또는 notifyAll() => Wait-Set 영역에 있는 스레드를 깨워서 실행될 수 있도록 한다. (notify()는 하나, notifyAll()은 Wait-Set에 있는 전부를 깨운다.) => wait()과 notify(), notifyAll() 은 동기화 영역에서만 실행할 수 있고, Object클래스에서 제공하는 메서드 이다. 예제① public class T19_WaitNotiftTest { /* wait() => 동기화 영역에서 락을 풀고 Wait-Set영역(공유객체별로 존재)으로 이동시킨다. notify() 또는 notifyAll() => Wait-Set 영역에 있는 스레드를 ..
-
리스트 동기화 처리 예제-22.03.31고급자바 2022. 3. 31. 11:32
Vector, Hashtable 등의 예전부터 존재하던 Collection들은 내부에 동기화 처리가 되어있다. 그런데, 최근에 새로 구성된 Collection 클래스 들은 동기화 처리가 되어있지 않다. 그래서 동기화가 필요한 프로그램에서 이런 Collection들을 사용하려면 동기화 처리를 한 후에 사용해야 한다. public class T18_SyncCollectionTest { //동기화 처리를 하지 않은 경우 private static List list1 =new ArrayList(); public static void main(String[] args) { Runnable r=new Runnable() { @Override public void run() { for(int i=1; i임계영역발생 ..
-
Synchronized,Lock예제-22.03.31고급자바 2022. 3. 31. 11:09
은행의 입출금을 스레드로 처리하는 예제 * (Synchronized를 이용한 동기화 처리) public class T16_SyncAccountTest { public static void main(String[] args) { SyncAccount sAcc=new SyncAccount(); sAcc.deposit(10000); BankThread bth1=new BankThread(sAcc); BankThread bth2=new BankThread(sAcc); bth1.start(); bth2.start(); } } 은행의 입출금을 관리하는 클래스 정의 class SyncAccount{ private int balance; //잔액 public int getBalance() { return this.ba..
-
동기화(Synchronization)-22.03.30고급자바 2022. 3. 30. 17:36
동기화란? 공유자원(객체)을 순서대로 작업이 이루어지도록 처리하는 방법을 의미한다. 필요한 이유? 프로새스 내의 자원을 여러개의 스레드가 공유하여 작업을 진행하다 보면 예기치 못한 결과를 초래할 수 있는데 이런경우의 문제가 발생할 여지가 있을법한 영역인 임계영역에 동기화 처리를 해줌으로써 문제발생을 방지할 수 있다. 과도한 동기화는 안좋고 필요한 영역만 선별적으로 사용하여야 한다. public class T15_SyncThreadTest { public static void main(String[] args) { ShareObject sObj=new ShareObject(); WorkThread th1=new WorkThread("1번스레드",sObj); WorkThread th2=new WorkThre..
-
ThreadShare-22.03.30고급자바 2022. 3. 30. 17:03
스레드에서 데이터를 공통으로 사용하는 방법 1. 공통으로 사용할 데이터를 클래스로 정의한다. 2. 공통으로 사용할 클래스의 인스턴스를 만든다. 3. 이 인스턴스를 각각의 스레드에 넘겨준다. 4. 각각의 스레드는 이 인스턴스의 참조값을 저장한 변수를 이용하여 공통 데이터를 사용한다. 예) 원주율을 계산하는 스레드가 있고 , 계산된 원주율을 출력하는 스레드가 있다. 원주율을 계산한 후 이 값을 출력하는 프로그램을 작성하시오 (이 때 원주율을 저장하는 객체가 필요하다.) =>계산한 후 값을 출력해야하므로 계산이 완료되었는지를 공유하면서 실행한다. public class T14_ThreadShareDataTest { public static void main(String[] args) { ShareData sd..
-
Thread yield,Stop,interrupt()-22.03.30고급자바 2022. 3. 30. 16:27
yield yield() 메서드에 대하여... 1. 현재 실행 대기중인 동등한 우선순위 이상의 다른 스레드에게 실행기회를 제공한다.(양보) 2. 현재 실행 중인 스레드의 상태를 Runnable 상태로 바꾼다. (Waiting 이나 Blocked 상태로 바뀌지 않는다. 즉 Runnable->Runnable) 3. yield() 메서드를 실행한다고 해서 현재 실행중인 스레드가 곧바로 Runnable상태로 전이된다고 확신할 수 없다. public class T12_ThreadYieldTest { public static void main(String[] args) { Thread th1=new YieldThread1(); Thread th2=new YieldThread2(); th1.start(); th2.s..