필터링 - 중간처리 기능으로 요소를 걸러내는 역할 - distinct() : 중복을 제거하는 메소드 - filter() : 매개값으로 주어진 Pridicate 객체가 true를 반환하는 요소만 필터. public static void main(String[] args) { List names = Arrays.asList("가나다","라마바","가나다","차카타","파하"); //이름 중복 제외. names.stream() .distinct() .forEach(System.out::println); System.out.println(); //"가"로 시작하는 이름만 필터 names.stream() .filter(n->n.startsWith("가")) .forEach(System.out::println); ..
Stream은 BaseStream이라는 부모 인터페이스가 있고 각각의 자식인터페이스로 다음과 같이 있다. Stream : 객체요소를 처리하는 스트림 나머지 : 각각의 타입에 맞는 primitive 타입에 대한 요소를 처리 컬렉션으로부터 스트림 얻기 public class FromCollectionExample { public static void main(String[] args) { List studentList = Arrays.asList( new Student("티타늄",10), new Student("오리발",5), new Student("하하하",30), new Student("케케케",24) ); Stream stream = studentList.stream(); stream.forEach(s..
스레드풀 - 병렬작업 처리가 많아지면 스레드 개수 증가 -> 스레드 생성 및 스케쥴링을 CPU가 바빠져서 메모리 많이 사용 - 결국 성능저하. - 갑작스런 병렬 작업처리가 많아질 때 스레드풀을 이용. - 스레드를 제한된 개수만큼 정해놓고 작업큐(Queue)에 들어오는 작업들을 하나씩 스레드가 맡아서 처리. - 스레드풀 생성/사용을 위해 Executors 클래스와 ExecutorService 인터페이스를 제공. - Executors의 다양한 정적메소드로 ExecutorService의 구현객체를 만들 수 있는데 이것이 바로 스레드풀. 스레드풀 생성 Executors 클래스 - newCachedThreadPool() - newFixedThreadPool() ExecutorService executorServi..
Thread Group - 관련된 스레드를 묶어서 관리할 목적으로 사용. - JVM이 실행될때 - system 스레드 그룹을 만듬 - JVM 운영에 필요한 스레드들을 생성 - system 스레드 그룹에 포함시킴 스레드 그룹 이름 얻기 ThreadGroup group = Thread.currentThread().getThreadGroup(); String groupName = group.getName(); 스레드 그룹 예제 public static void main(String[] args) { ThreadGroup group = Thread.currentThread().getThreadGroup(); //System.out.println(group.getName()); AutoSaveThread auto..
스레드 상태제어 - 실행중인 스레드의 상태를 변경하는 것. - 메소드로 주로 제어 - interrupt(), sleep(), join(), wait(), yield() notify(), notifyAll() 등의 메소드가 존재. - 이중 notify(), notifyAll(), wait() 메소드는 Object 클래스의 메소드이고 나머지는 Thread 클래스의 메소드. 일정시간동안 일시정지 : sleep() - 실행중인 스레드를 일시정지. - 매개값으로 밀리초를 넣어주면 해당 시간동안 sleep() 메소드를 만나는 스레드는 일시정지함. - 일시정지 상태에서 interrupt() 메소드를 호출할 경우 InterruptedException이 발생됨. try{ Thread.sleep(1000); //1초간 일..
안드로이드는 맨처음 MainActivity에서 onCreate 메소드가 실행됨. 버튼을 클릭해서 액티비티를 전환하고자 한다면. 버튼에 클릭이벤트를 걸어야함. 그때 액티비티 이동하는 소스를 넣어준다. public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn1 = findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener(){ @Ov..
공유 객체 사용시 - 싱글 스레드의 경우는 고민할 경우가 거의 없다. - 멀티 스레드의 경우 스레드간의 하나의 객체 공유 시 디버깅하기 어려운 오류가 나타날 수 있다. Tread-1이 공유객체의 멤버변수에 할당된 값을 변경. -> 그사이 Thread-2가 공유 객체의 멤버변수에 할당된 값을(null이 아닌지 모르고) 엎어침. -> Thread-1 공유객체 사용하려는데 값이바뀜. -> 오류!! 이를 방지하기 위해 단 하나의 스레드만을 실행할 수 있는 임계영역을 지정해야 한다. 즉, 객체에 잠금을 걸어두어 하나의 스레드만이 접근가능하고 나머지 스레드는 대기하도록 만든다. 키워드 : synchronized 동기화(synchronized) 메소드 public synchronized void method(){ /..
스레드의 우선순위 동시성 : 멀티작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가면서 실행하는 성질 병렬성 : 멀티작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질 스레드 스케줄링 - 스레드의 갯수가 코어의 수보다 많을 경우에 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가에 대한 계획. - 아주 짧은 시간 스레드의 run 메소드를 번갈아가면서 실행한다. 우선순위(priority) 방식 - 우선순위가 높은 스레드가 실행상태를 더 많이 가져감. - 객체에 우선순위를 부여하여 개발자가 제어가능. - 1부터 10까지 우선순위, 높으면 먼저 실행 thread.setPriority(우선순위); 우선순위 상수 : Thread.MAX_PRIORITY(10), Thread.NORM_PRIORITY(5..