본문 바로가기
728x90

java8

[Java] 스레드 monitor란? 자바에서 모든 객체는 monitor를 가지고 있다. monitor는 여러 스레드가 객체로 동시에 객체로 접근하는 것을 막는다. 여기서 모든 객체가 중요하다. heap 영역에 있는 객체는 모든 스레드에서 공유 가능하기 때문이다. 스레드가 monitor를 가지면, monitor를 가지는 객체에 lock을 걸 수 있다. 그렇게 되면 다른 thread들이 해당 객체에 접근할 수가 없게된다. 아래 코드를 살펴보자 class Hello implement Runnable { @Override public void run() { String hello = "hello"; synchronized (hello) { System.out.println(hello); } } } monitor를 가질 수 있는 것은 synchro.. 2021. 3. 20.
[JPA] Java EE 에서의 Transaction Container managed 트랜잭션 Container-managed 트랜잭션 자바 엔터프라이즈 빈에서는 기본적으로 container-managed 트랜잭션을 사용한다 보통 메소드 시작시 트랜잭션 시작되고 메소드가 종료 직전에 commit된다 각 메소드는 single 트랜잭션이 된다 Nested 혹은 멀티 트랜잭션은 메소드내에서 허용되지 않는다 Container-mananged 트랜잭션에서는 트랜잭션에 관련 메소드가 필요하지 않다 그냥 필요한 빈 메소드가 트랜잭션 attribute를 붙혀주기만 하면된다 (@TransactionAttribute) 만약 트랜잭션을 컨트롤 하고 싶다면 application-managed 트랜잭션을 사용해야 한다 Container-managed 트랜잭션을 사용하는 빈에서는 .. 2021. 3. 4.
[JPA] jdbc에서의 Transaction 1. auto commit 모드 끄기 커넥션이 생성되면 바로 auto commit 모드로 세팅된다 즉, 각 SQL문이 완료되는 족족 commit된다. 그 다음 실행된다 완료 → commit → 실행 그래서 동시에 업데이트 하려면 auto commit 모드를 꺼야 한다 con.setAutoCommit(false); con : active connection 2. Transaction commit하기 auto commit 모드를 끄면 commit() 명령실행 전까지 commit하지 않는다 commit을 실행하면 현재 트랜잭션에서 모든 SQL명령들이 하나의 unit으로 반영된다 public void updateCoffeeSales(HashMap salesForWeek) throws SQLException { .. 2021. 3. 3.
자바의 철학으로 보는 JVM Java가 무엇인가라는 질문에 자바의 철학을 먼저 살펴봐야 될 것 같다. 자바의 철학은 Write Once, Run Everywhere으로 시작하여 점차 발전해왔다. 이러한 철학을 실현하기 위해 4가지의 개념을 도입했다. 자바 프로그래밍 언어 클래스 파일 포멧 자바 API (Application Programming Interface) JVM 이 순서대로 자바의 구동원리를 이해한다면 전반적인 그림을 그릴 수 있을 것이다. 우리는 Java라는 언어를 통해 .java 형식으로 개발자가 읽을 수 있는 코드를 작성한다. 작성한 코드는 JDK라는 Java를 개발하기 위한 여러 툴을 가진 곳에서 javac라는 컴파일러를 사용하여 컴퓨터가 이해할 수 있는 byte code인 .class로 컴파일된다. 우리가 흔히 아.. 2021. 2. 19.
Java8 Stream 정리 클린코드 8기 과정을 들으면서 필요한 내용을 정리한 글입니다. Stream Data Structure가 아니다 stream을 데이터를 store할 수 없다 Stream 생성 Stream.of .stream() Stream.Builder 이미 존재하는 Array, Object, List를 stream으로 생성 Employee[] arrayOfEmps = { new Employee(1, "Jeff Bezos", 100000.0), new Employee(2, "Bill Gates", 200000.0), new Employee(3, "Mark Zuckerberg", 300000.0) }; Stream.of(arrayOfEmps); List empList = Arrays.asList(arrayOfEmps); e.. 2020. 5. 16.
@ParameterizedTest 최근 클린코드 8기 과정을 들으면서 필요하다고 생각했던 내용을 번역한 글입니다 @ParameterizedTest 메소드는 private, static이 되어서는 안된다 아래 목록 중 하나는 꼭 있어야 한다 ArgumentProvider @ValueSource @CsvSource provider는 Arguments의 Stream을 제공해야 한다 DEFAULT_DISPLAY_NAME "[{index}] {arguments}" {0} : 0번째 argument 정리 @ParameterizedTest @ValuSource @NullSource @EmptySource @NullAndEmptySource @EnumSource(Month.class) @EnumSource( value = Month.class, nam.. 2020. 5. 16.
728x90