소스 분석 중에 궁금한 점이 있어서 올립니다.ㅜㅜ
솔길
일단 프로그램이 돌아가는 방식은 알겠어요..근데 세밀하게 들어가다 보면 궁금한게 생기네요 ㅜㅜ
주석 부분은 제가 이해한 부분이고 소스 밑에 질문을 올리겠습니다.
class Counter { private static int count = 0; //상수 count =0으로 초기화 public static final synchronized void increment() { // 동기화 메소드 선언 //위의 상수를 받아오기 위해서 static 선언, 한개의 주소값으로 다른 곳에서 못쓰게 final 선언 count++; } public static final synchronized int getCount() { // 동기화 메소드 선언 return count; // 메소드가 종료되며 count를 반환//위increament()와 마찬가지로 선언 // 위의 메소드 호출 시 count 값을 반환 }}
class Dog extends Counter { // Counter 상속 public Dog() { } // 생성자 (인자값과 {}안의 내용이 없습니다.) // 죄송하지만 {}안의 값은 뭐라하나요??갑자기...ㅠ public void woof() { increment(); } //woof메소드 선언 increament()호출}
class Cat extends Counter { public Cat() { } public void meow() { increment(); } //위 Dog 클래스와 같습니다.}
public class Ruckus { public static void main(String[] args) { // 메인 메소드 Dog dogs[] = { new Dog(), new Dog() }; // Dog클래스 자료형 dogs[]배열선언 , // 배열 안의 값은 Dog()객체 2개 초기화 for (int i = 0; i dogs.length; i++) //dogs의 길이값 2만큼 for문을 돌립니다. dogs[i].woof(); // dogs[0], dog[1]의 값에 woof를 대입. -count ++ 가 2번 도니깐 count 의 값은 2 Cat cats[] = { new Cat(), new Cat(), new Cat() }; for (int i = 0; i cats.length; i++) cats[i].meow(); //위와 마찬가지로 System.out.print(Dog.getCount() + woofs and ); // Dog안의 상속 받은 getcount()를 호출 //위의 getCount()메소드를 가보면 count를 반환하기 때문에 for문 2개가 위의 돌아갔기 때문에 //Dog.getCount()값은 5입니다. System.out.println(Cat.getCount() + meows); //위와 마찬가지 입니다. 똑같이 Cat.getCount()의 값은 5 }}
제가 알고 있는 것과 궁금한 점을 말씀드리겠습니다.1.synchronized는 동기화하는 부분인데 . 스레드에서 동시 실행되면 문제가 생길 수 있는 부분을 JVM에서 락을 걸어서 스레드를 돌리는 순서를 정한다고 알고 있습니다.위의 소스에서 문제가 생길 수 있는 부분이 어디인가요??ㅜㅜㅜㅜㅜ위의 Count 클래스에 static finalsynchronized를 쓴 이유도 궁금합니다.
2.위의 소스에서 스레드가 사용되는 부분이 있나요?? 있다면 어디 부분인지 알고 싶습니다.
3.Dog dogs[] = { new Dog(), new Dog() }; 이 부분은 배열에 객체를 넣는 부분인데. 콜렉션이 쓰인 것 같습니다. 이 부분이 콜렉션이 아니라면 무엇인가요? 또 콜렉션이 맞다면 용도를 알고 싶습니다.
4. 마지막 으로 저에게 공부가 될 만한 부분좀 알려주시면 안될까요 ??? 그리고 위의 소스가 나타내고자 하는 점은 스레드의 동기화인가요?? 말고 또 다른게 있다면 그 것도 알고 싶습니다.
부탁드리겠습니다.ㅜㅜㅜ
-
꽃큰
그 밑에 고양이 울음을 출력하려면 이미 increamentㅇㅔ Count가 증가되서 5가 나오네요 프로그램이 총횟수를 알려는 프로그램 이라면 개와 고양이 울음 소리를 각각 출력하게 하지 않았을텐데
위 소스를 각각 2 개울음과 3 고양이울음으로 출력되게 하려면 어떻게 해야할까요....ㅜㅜ -
비마중
우와!! 이제 뭔가 프로그램이 요구하는 바를 알것같아요
하지만 위 소스는 5개울음 과 5번 고양이울음 으로 답을 내리는데 잘못된 소스인가요 ...
각각 계산이 안되네요 Dog 의 for문 밑에 프린트 문을 놓으면 개울음 횟수는 나오는데 -
BlackCat
클래스 이름이 Ruckus 라면... 실생활에서 그렇듯이 여기저기서 개 고양이가 막 울어대야 어떤넘이 몇번을 울었는지 알기 어렵겠져? 그때 우는것을 순차적으로 cache 하게 만드는것이 synchronized 입니다.
-
메이
ㅜ_ㅜ 이 소스의 중점은 뭘까요???? ㅜㅜ
-
여자
1.2 : 위 소스는 스레드 사용은 없구요.. synchronized 는 동기화 method 로 선언하는 것은 맞지만 위 소스상으로는 synchronized 로 선언하지 않아도 같은 값이 프린트 될것입니다.
3. 음.. 머라설명해야할까여... 용어상으로는 콜렉션이라 할 수 있는데요.. 음 그냥 배열입니다. ㅎㅎ
4. 어떤것을 배우고 싶은지 먼저 곰곰히 생각해 보세요.. 무작정 JAVA 괜찮은 책 하나 열공해도 나쁘지 않습니다.