동기와 비동기는 응답을 요청함에 있어 순서와 결과에 관심이 있는지로 판단할 수 있다.
작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 뜻함
→ ProcessA는 ProcessB의 요청을 하고 요청에 대한 응답이 올때까지 대기한다. ProcessB의 일이 끝나면 ProcessA의 작업을 재개한다.
작업의 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않는것을 의미
→ ProcessA는 ProcessB의 요청을 하고 요청에 대한 응답 여부에 상관없이 ProcessA의 작업을 계속 진행한다. ProcessB의 일이 끝나면 ProcessA의 작업을 재개한다.
다른 주체가 작업을 할때 자신의 제어권이 있는지 없는지로 확인할 수 있다.
ProcessorA가 요청한 작업에 대한 ProcessorA의 응답이 돌아올때까지 대기하는것ProcessorB로 부터온 응답이 꼭 필요하고 이 응답값으로 ProcessorA의 다음 job을 수행해야한다.
다른 주체의 작업에 관련없이 자신의 작업을 하는 것
메서드의 리턴 타입이나 매개 변수의 타입을 자동으로 컴파일 시 타입을 추정하여 결정하는것
함수형 인터페이스의 추상 메서드에 의해 예상되는 매개 변수의 타입을 추론할 수 있기때문에 리턴 타입이나 매개 변수의 타입을 생략할 수 있다.
public final class Test {
public static void main(String[] args) {
//MyFuntionalInterface mfi = (int a) -> { return a * a; };
MyFunctionalInterface mfi = a -> a * a;
int b = mfi.runSomething(5);
System.out.println(b);
}
}
@FunctionalInterface
interface MyFunctionalInterface {
public abstract int runSomething(int count);
}
SetterInjection클래스는 Pojo클래스를 Setter를 통해 객체를 주입하였다. SetterInjection클래스는 Pojo클래스를 주입하지 않아도 객체 생성이 가능하다. SetterInjection의 객체가 생성된다는것은 getPojo() 호출할 수 있다는것인데, 이는 주입되지 않은 Pojo객체를 호출하므로 NullPointerException을 발생 시킨다.
public class Pojo {
public String getName() {
return "hello world";
}
}
public class SetterInjection {
private Pojo pojo;
public void setPojo(Pojo pojo) {
this.pojo = pojo;
}
public String getPojo() {
return pojo.getName();
}
}
public class Main {
public static void main(String[] args) {
SetterInjection setterInjection = new SetterInjection();
setterInjection.getPojo();//Exception in thread "main" java.lang.NullPointerException
}
}
프로세스들 사잉의 수행 시기를 맞추는것
동기화가 필요한 상황들
→ 프로세스 뿐만 아니라 스레드도 동기화의 대상이다. 실행의 흐름을 갖는것은 모두 동기화의 대상이다.
많은 도움이 되었습니다, 감사합니다.