스위치문(*) 문제풀이 과정에서 선생님께서 아래와같이 진행하셧습니다. * 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음, 섹션 4. 조건문, switch문 관련 건 해당 문제를 자바 14 새로운 switch문 관련하여 알려주신 내용이 있어 그 방법으로도 풀어봐야겠다 싶어, 진행해 보았는데요. 아래와같이 default 를 지워도 값이 나오지 않을뿐이지 에러메시지가 출력되진 않더라구요? 해당사항이 없으면 에러가 날거같은데 그렇지않아서 제가 자바 14 새로운 switch문 관련하여 문제를 잘못푼것인지 무언가를 놓친게 있는것인지 궁금하여 여쭤봅니다. 감사합니다!!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 쓰레드의 동시성이슈를 syncronized로 해결하였을때 로그를 보면, 00:53:11.012 [ t1] 거래 시작: BankAccountV3 00:53:11.012 [ t2] 거래 시작: BankAccountV3 00:53:11.020 [ t1] [검증 시작] 출금액: 800, 잔액: 1000 00:53:11.021 [ t1] [검증 완료] 출금액:800, 잔액: 1000 00:53:11.489 [ main] t1 state: TIMED_WAITING 00:53:11.490 [ main] t2 state: TIMED_WAITING 00:53:12.021 [ t1] [출금 완료] 출금액:800, 잔액: 200 00:53:12.021 [ t1] 거래 종료 00:53:12.021 [ t2] [검증 시작] 출금액: 800, 잔액: 200 00:53:12.022 [ t2] [검증 실패] 00:53:12.024 [ main] 최종 잔액: 200 이런식으로 t1, t2 두 쓰레드중 하나가 blocked 되는 것이 아니라 모두 time_waiting상태로 유지 됩니다. 뭔가 느낌으로는 큰 상관은 없을 것 같고, 시스템 환경에 따른 차이인 거 같은데, 혹시나 제가 세팅을 잘못했거나 코드를 잘못 짰을 가능성도 있을까요. ## 메인 클래스를 반복해서 실행해보니 t1, t2 스레드 모두 time waiting 상태이거나 모두 blocked 상태가 됩니다.
왼쪽화면: 강의영상 / 오른쪽: 제 코드 강사님이 하셨을 땐 엔터로 여러 숫자들 입력하고 그 숫자들의 합과 평균을 입력할 수 있는데, 저는 똑같이 쳐도 숫자를 한개씩만 입력할 수 있어요.. 제 코드는 package scanner; import java.util.Scanner; public class ScannerWhile3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int sum = 0; int count = 0; int input = 0; System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요: "); while(true){ input = sc.nextInt(); if(input == -1){D break; } sum += input; count++; double average = (double) sum / count; System.out.println("입력한 숫자들의 합계: " + sum); System.out.println("입력한 숫자들의 평균: " + average); } } } 이와 같은데 무엇이 강사님과 다른지 모르겠습니다!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 데이터를 삭제하는 기능에서 removeNode 를 null 값으로 처리하는 이유가 있을까요? removeNode 를 더 이상 사용되지 않는 것 같은데, 해당 노드의 item 과 next 를 null 값으로 처리해야만 GC 대상이 되는건가요? null 값으로 명시하지 않아도 될 것 같아 질문드립니다. // 추가 코드 public Object remove(int index) { Node removeNode = getNode(index); Object removedItem = removeNode.item; if (index == 0) { first = removeNode.next; } else { Node prev = getNode(index - 1); prev.next = removeNode.next; } removeNode.item = null; removeNode.next = null; size--; return removedItem; }
i++ 은 1줄이지만 , 2~3개의 cpu 연산이 필요하므로 원자적 연산이 아닙니다. cas 도 상식적으로는 2개 이상의 cpu 연산이 필요한데 cpu 차원에서 1개의 cpu 연산처럼 제공해주기에, 원자적 연산이라고 보는것 같습니다. 아래와 같은 경우 원자적연산인데, int count = 3; 그렇다면 아래의 코드는 원자적연산인가? 생각해보면, max 값을 가져오고 그걸 대입해야 하므로 2개 이상 cpu 연산이 필요한것 같은데 확신은 들지 않습니다. int count = max; -- 그래서... 어디까지가 원자적 연산인지 확실히 알수 있는 방법이나 이와 관련된 스펙문서 등이 있는지 궁금합니다.
[질문 내용] 안녕하세요. 항상 좋은 강의 감사드리며 질문이 하나 있습니다. 멀티 코어라는 가정하에, synchronized가 붙은 메소드를 정말 동시에 호출하는 경우에는 어떤 스레드가 Lock을 가져가는지 궁금합니다. 정말 동시에 호출되면 두 스레드 모두 Lock을 획득할 수 있는지 조회할 때 획득할 수 있다고 조회가 될 것 같아서요.
BankAccountV5에서 lock.tryLoc()을 사용하는 경우, lock을 얻지 못하면 WAITING하지 않고 바로 return false;하므로 finally { lock.unlock(); }라는 코드가 필요 없을 것이라 생각했는데 이 코드가 꼭 필요한 코드인가요?
public class ItemPriceTest { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("사과", 500); map.put("바나나", 500); map.put("망고", 1000); map.put("딸기", 1000); // 코드 작성 ArrayList<String> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { if (entry.getValue().equals(1000)) { list.add(entry.getKey()); } } System.out.println(list); } } 여기서 entry.getValue() 의 비교를 == 으로 바꿔도 돌아가는데 상관없을까요? 객체의 경우 == 이냐, equals냐에 따라 동일성, 동등성 비교로 나뉘는거같은데 이와같이 값 비교 할 땐 둘 다 사용할 수 있는걸까요? == 을 사용해도 망고, 딸기가 출력되어 여쭤봅니다 [질문 내용] 여기에 질문 내용을 남겨주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. scanner.nextLine(); 해당 코드를 for문 안에 String productName = scanner.nextLine(); 밑에 하나만 사용해도 정상적으로 동작하는데 이렇게 해도 상관없을까요?
강의 잘 듣고 있습니다~ 안녕하세요~ 불변객체 강의를 듣다가, memberB.getAddress().setValue("부산"); memberB.setAddress(new ImmutableAddress("부산")); 위 코딩문을 너무 자연스럽게 작성하셨는데 불변객체 앞 강의들 메모리구조는 이해가 됐는데 이번 문장은 그림이 안그려져서요 혹시 다른 분들은 쉽게 읽혀지셨나요 ㅠㅠ
notify / signal 차이점 설명하시면서 1) java 버전과 구현에 따라 다르다. 2) jvm 구현에 따라 다르다. 라고 말씀하시는데, 이 둘간의 정확한 차이가 뭔지 궁금합니다. 제 지식으로는 아래 정도로 보이는데, 1) java 라이브러리단에서 구현된 방식(=디컴파일을 통해 내부 로직을 알수있음, 컴파일러 버전에 영향) vs 2) jvm 내부에 구현된 방식(=디컴파일해서는 내부 로직 알수없음, 컴파일러가 아닌 런타임에 사용된 java 버전에 영향) 로 보면 되는가요? 1) java 구현: 컴파일시 사용된 java 구현체( .java -> .class 변환) 2) jvm 구현 : 런타임에 사용되는 jvm 구현체?(.class 구동)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. cklee 님의 질문을 도와주다가 저가 답변의 실수를 발견하여 수정하고 고친 다음에 다시 답변을 하였습니다. 근데 코드를 고치다 보니까. 뭔가 이상한 것을 발견해서. 질문을 드립니다. A코드랑 B코드가 있는데, A의 syso는 문자열이 다 나오는데, B코드는 "()"를 안치니 false가 되던데.. 그 이유가 연산자의 우선순위 때문에 "글자 문자열 + str6" 을 하고 나서, "합친 str6 == str7" 이렇게 비교 되는 건가요?(질문을 하다 보니까 깨달아 지더라고요.) 그리고 이 계기로 인하여 정확한 답을 해주는게 어렵다는것을 느끼게 되네요. 공식서포즈님들 및 ,영한님 감사를 드립니다. 답변 부탁드립니다. 그리고 버그 있음. 글이 이상해서 수정했는데. 이렇게 나옴.. 추가 그리고 몸이 아프거나 피곤 할때는 코드 여러번 보는게 좋네요..(코드를 보긴 했는데 정확히 제대로 안봄...)
같은 참조값을 사용하는 다른 스트링객체의 값이 변경 될수 있어 스트리잉 불변객체로 되어있다는것은 이해했습니다. 만약 스트링 풀에 hello java가있다면 String str1 ="hello"; String str2 = str1.concat(" java"); 이때 str2는 스트링 풀에있는 hello java의 참조값을 갖는걸까요?
Executor 스레드 풀 관리 - 분석 강의에서 정리 - Executor 스레드 풀 관리부분에서 4번 큐도 가득차고, 풀에 최대 생성 가능한 스레드 수도 가득 찼다. 부분을 강의하시다가 '에'를 큐 앞으로 당겨버리셨어여 그래서 에 큐도 가득차고, 풀최대 생성으로 바뀌었습니다