Java API에 대한 소스 코드가 없어도 API 메소드가 다중 스레드를 생성하는지 알 수 있습니까? Java API를 작성하고 여러 스레드를 작성하는 경우 따라야 할 규칙이 있습니까? 이것은 매우 근본적인 질문 일지 모르지만 요점 질문 인 "Java API가 쓰레드를 생성하고 어떤 Java API가 생성되지 않는지 어떻게 알 수 있습니까?"라는 토론에서 벗어났습니다.스레드를 생성하는 Java API
답변
한 가지 방법은 Thread
생성과 SecurityManager
에 ThreadGroup
수정을 허용하지 것입니다. java.lang.SecurityManager.checkAccess(Thread)
방법을 참조하십시오. 자신의 SecurityManager
을 구현함으로써 스레드 생성에 대응할 수 있습니다.
다른 질문에 답하려면 : 많은 라이브러리가 예상치 못한 경우에도 새 스레드를 만듭니다. 예를 들어 HTTP 통신용 API는 Keep-Alive 또는 세션 시간 초과를위한 타이머를 만듭니다. Java 2D는 시그널링 스레드를 생성하고있다. Java 자체에는 여러 스레드가 있습니다. Finalizer 스레드. AWT/Swing 이벤트 디스패처 스레드 등.
제 경험으로 볼 때 J2EE가 아닌 핵심 Java를보고있는 경우 코어 Java에서 스레드가 생성되었다고 생각할 수있는 유일한 시간은 Swing입니다.
물론 스레드 클래스를 제외하고 핵심 Java API에서 생성되는 다른 스레드의 예는 보지 못했습니다. :)
그러나 다른 라이브러리를 사용하고 있다면 스레드를 만들고있는 것일 수도 있지만 프로필을 작성하지 않으려는 경우 새 스레드가 생성 될 때마다 AspectJ를 사용하여 로그하는 것이 좋습니다. 그리고 무엇을 호출했는지에 대한 스택 추적을 통해 스레드를 생성하는 것을 볼 수 있습니다.
UPDATE :
스윙이 게시물에 따르면, 4 개 스레드를 사용하지만, 그는 또한 당신이 필요한 경우, 스레드를 죽이는 갈 수있는 방법을 설명합니다. 새 스레드를 만들 도서관 결정
말할 방법이 없습니다. 실제로, 나는 당신이 어떤 종류의 제약 된 환경에 있지 않는 한 당신이 평상시와 크게 다르지 않을 것이라고 생각합니다. 좀 더 관련성이 높은 것은 특정 메서드 (AWT Event dispatch thread, 필자가 보았던 경우)에서 실행될 것으로 예상되는 방법으로 작성되었는지 확인하는 것입니다. 코드가 어떤 종류의 명명 규칙을 사용하고 있거나 문서화되어 있지 않다면, 그렇게 할 수있는 방법이 없습니다.
활성 스레드를 보려면 jvisualvm 응용 프로그램 ($ JDK/bin 디렉토리에 있음)을 실행하여 모든 로컬 Java 프로세스에 연결하십시오. 스레드 이름, 상태 및 기록을 비롯하여 프로세스에 대한 다양한 정보를 볼 수 있습니다. 더 많은 정보를 얻으려면 here.
- 1. Groovy 소스 파일을 생성하는 Java/Groovy API
- 2. Java UML API/라이브러리
- 3. 스레드를 생성하는 메서드를 단위 테스트하는 방법?
- 4. n 개의 스레드를 생성하는 방법은 무엇입니까?
- 5. wsgi 응용 프로그램에서 스레드를 생성하는 것이 좋습니까?
- 6. 다중 스레드를 통한 Java 로깅
- 7. Javassist 대. Java 컴파일러 API
- 8. XML 용 Java API
- 9. GCC 컴파일. Java API
- 10. Java 컴파일러 API ClassLoader
- 11. Java API 소스 코드
- 12. SQL에서 Java API Generator
- 13. Flickr API Java/Clojure
- 14. java 파일/디렉토리 api
- 15. ImageMagick Java API
- 16. Java 콘솔 API
- 17. SAS에 연결하기위한 Java API
- 18. Java 백엔드 용 API
- 19. Matlab/Java API 콜백
- 20. Pdflib Java API
- 21. NativeProcess API Java 디버깅?
- 22. 블로그 검색 API (Java)
- 23. 페르시아어 음역 Java API
- 24. 작업 대기열 Java API
- 25. .class path api java
- 26. android java API 이메일
- 27. Lombardi Java API
- 28. 분류 처리를위한 Java API
- 29. Java Persistence API
- 30. 주파수에서 WAV 파일을 생성하는 Ruby API?
내가 아는 한, Swing (실제로는 AWT)은 SwingUtilities의'invokeLater' 및'invokeAndWait' 메소드를 통해 액세스하는 단일 이벤트 발송 스레드 만 작성합니다. – Powerlord
@R. Bemrose - Swing이 하나 이상을 생성한다면 확실하지 않습니다. 그렇다고해서 100 % 확신하지 못하기 때문에 "may"를 넣는 것입니다. –
Eclipse의 디버거에서 단일 JFrame을 열 때 적어도 3 개의 스레드 ("AWT-EventQueue", "AWT-Windows", "AWT-Shutdown")를 볼 수 있습니다. 때때로 나는 AWT/Swing을 사용하는 경우에만 "DestroyJavaVM"스레드도 볼 수 있습니다. –