임계 영역이 무엇일까요? 이것은 둘 이상의 쓰레드 (worker)가 동시에 접근하면 안 되는, 공유 영역에 접근하는 코드를 말합니다. 다시 말해, 둘 이상의 worker가 동시에 접근하면 문제를 일으킬 수 있는 코드들을 말합니다. 예제 하나를 보면서, 같이 분석해 보도록 하겠습니다. 먼저 ACCOUNT 클래스입니다. remain이라는 필드가 있어요. 이것은 남은 돈을 의미합니다. 이 클래스에는, put_money, 그러니까 입금하는 메서드와 get_money, 출금하는 메서드가 있어요. 이들은 각각 x만큼 넣고 빼는 일을 합니다. 그리고 우리는 Worker의 w1과, Worker2의 w2를 동시에 실행합니다. 이들은 start 메소드가 있는 걸로 보아서는 Thread를 상속했을 거 같네요. run() 메..
Java 검색 결과
오늘은 Java의 객체, 클래스에 대해서 알아보도록 하겠습니다. 돌아 돌아 여기까지 오기는 했는데. OOP의 컨셉을 5 ~ 7편에 걸쳐서 잡도록 하겠습니다. 클래스는 설계도, 객체는 설계도 대로 만들어진 실체로 생각하시면 편한데요. 예제 프로그램을 보면서 이해해 보도록 하겠습니다. 조금 쉬운 예제가 뭐가 있을까요? 자판기를 예로 들어 봅시다. 실제로 자판기는, 물건이 여러 개가 있고, 물건이 없는 경우도 처리를 해야 합니다만. 여기에서는 간단하게, 물건은 셀 수 없을 정도로 너무 많이 있고, 1가지 물건만 판다고 해 봅시다. 그러면 우리는 자판기가 해야 할 일을 2가지로 요약할 수 있을 겁니다. get_item과 put_money 이렇게 2개로요. 그러면 자판기의 상태는 어떻게 표현하면 좋을까요? 일단,..
java의 toString 메서드는, 객체의 정보를 리턴하는 역할을 합니다. 사실 이 부분에 대해서 저는 별로 중요하게 생각을 하지는 않았습니다. 이걸 보면 아직도 멀었다는 생각이 듭니다. 하여튼, Object의 정보는 언제 볼까요? 당연하게도, 디버깅을 할 때 어디서 잘못되었는지 보기 위해서 볼 겁니다. 기본적으로, 자바에서, 최상위 부모는 Object입니다. 따라서, 클래스에 toString이 override가 되어 있지 않으면, Object에 있는 toString을 부르게 됩니다. 이 함수를 봅시다. 그러면 뭔가 getClass().getName()에 @을 concat를 하고, hashCode값을 16진수화 시킨 것을 또 concat 한다는 것을 알 수 있어요. myClass 클래스를 선언하였습니다..
java에서 static 필드에 대해서 배웠습니다. 그러면, 함수 앞에도 static을 붙일 수 없을까요? 이를 정적 함수, 혹은 static 함수라고 하는데요. 예를 들어보겠습니다. 저는 myClass 클래스를 선언했습니다. 그리고, main 함수에서 myClass.foo()를 호출하고 있습니다. 그래도 될까요? 네. 일단 된다고 합니다. 일반 메서드와 다른 것은, 일반 메서드 (instance method) 는 객체.xxx(); 로 호출을 했습니다. 그런데, 이것은 class 이름.xxx();로 호출을 했다는 점이 다릅니다. 이게 왜 그렇게 될 수 있는지는 나중에 다시 이야기 해 드리도록 하겠습니다. 지금은 그냥, 아. 클래스 이름.함수명() 으로 호출할 수 있는 게 정적 함수구나. 정도만 짚고 넘어..
안녕하세요. chogahui05입니다. 생산자 소비자 문제를 구현할 때, 한 가지 의문이 들었습니다. 분명히 맞게 구현한 거 같은데 왜 제대로 동작을 하지 않을까? 이는 제가 쓰레드를 시작할 때, start 메서드를 불러야 하는데, run 메서드를 불렀었기 때문입니다. 그렇기 때문에 LOCK을 풀어야 하는데 풀리지도 않고. 계속 wait 상태에만 걸렸었습니다. notify가 들어가지도 않고. 3시간을 날린 것은 덤이였고요. 그런 걸 보면, 전 면접에도, 서류도 통과할 자격이 없는 건 분명해 보입니다. 이 둘이 어떤 차이가 있길래 그럴까요? Thread 클래스의 내부를 간단하게 보겠습니다. 여러 가지 쓰레드에 대한 정보들이 있는데요. 이 중, group이라는 것도 볼 필요가 있습니다. 713번째 줄에, T..
최근댓글