자바 멀티 스레딩 소설 (A) - 스레드 세부 사항

간략한 소개

  즉, 현재의 JDK 스레딩 모델 기반의 운영 체제 원시 스레드 모델은 Windows 및 Linux 스레딩 모델에 추가로, 스레드에 대한 시스템 지원을 작동에 의존하는 것은 하나 하나를 제공하는 것입니다
  그것은 단순히 즉 :
    이제 Java 스레드 및 운영 체제 스레드에 일대일 매핑
    이제 Java 스레드이며, 운영 체제 스레드
 
일부는 스레드 있습니다 : 스레드는 자바 스레드의 추상적 인 설명입니다, 그것은해야합니다 쓰레드 프로그래밍 모델 멀티 스레드. 에 관계없이 결국 운영 체제 JVM 스레드의 방법 자바의 얼굴을 실행하는 방법 결국, 매핑, 프로그래머는 스레드 볼 수 있습니다.

멀티 스레드 개발은 Thread 객체를 조작한다 :

  공공 방법이 있습니다, 그 속성 필드가 단순히이 Thread 클래스라고 말을 추상 모델 스레드뿐만 아니라 스레드 작업 (의 Runnable를) 패키지, 스레드를 설정, 그는 그 항목을 구성,하지만 너무 많은 수
   그러니 당신이 스레드의 추상 모델을 이해, 당신은 당신이 구성해야 스레드를 취소 할 수 있습니다.
   솔루션 모델을 프로그래밍 멀티 스레드 것은 같은 루틴 동안 체스처럼, 당신은 더 빠르고 더 포괄적 쓰기 멀티 스레드 응용 프로그램을 만들 수 있습니다.
스레드 객체를 생성 스레드 객체를 사용 , 비정상적으로 간단하고하지 것으로 보인다. 더 이상의 스레드, 다중 스레드, 다중 상호 작용하는 방법에 멀티 스레드이기 때문에 스레드를 조작하는 방법은 여러 가지가 아니라 지능의 테스트입니다, 필연적으로 우리가 해결할 수있는 방법을 복잡한 협업 로직의 다양한 효율적인 조직을 생성 할 것이다,이 있습니다. 

: 자바는 논리 스레드 스레드 의 핵심 스레드 제어 , 스레드 동기화 , 스레드 통신을 .

  • 이러한 정보의 처리를 제어하는 ​​등의 이름, ID, 우선 순위 상태로서 자신의 특성과 스레드 클래스 자체와;
  • 스레드 캡슐화 작업을 위해, 자바는 휘발성 키워드가 동기화 과정 공유 리소스에 대한 액세스를 제어하는 ​​데 사용됩니다, 동기화 제공;
  • (물체로부터 상속) 행위의 일부 스레드 등은 가입, 통신 프로세스의 등가물을 기다린다.

    

 

그것이 무엇인지 결국 자바 멀티 스레드 프로그래밍?

  그래서 많은 그래서 결국 결국 자바 멀티 스레드 프로그래밍은 무엇을하다는 것을? 우리는 두 단계 "고 말했듯이 , 스레드 객체를 생성 스레드 개체를 사용하는 ."
  이 두 부분은 실 자체의 제어 및 치료,하지만 Thread 객체를 사용하는 경우, 우리는 스레드를 사용하려는 이유는, 가장 중요한 부분이 무엇입니까?
  작업을 수행하지?
    이 공유 리소스에 대한 액세스를 제공하는 경우 때문에 문제가 동기화하는 과정에 관련되어 있으므로, 멀티 스레드 코드는 더 이상 간단한 작업이 너무 간단하기 때문에 따라서 코드의 임무는 매우 중요합니다.
  이 부분이 훨씬 더 좋을 것입니다 무엇을 이해한다면, 자바 멀티 스레딩 학습.
첫 번째 부분, Thread 클래스 자체가 추상적 인 개념 및 스레드 스레드 지원 조작의 Java 제어 방법 --- 명확하게 이해.
두 번째 부분, 키워드에 대한 철저한 이해를 동기화 자바 동기화 로직의 명확한 이해.
이해 추상 자바 쓰레드 통신 로직의 명확성을 위해 세 번째 부분, 예컨대 대기와 같은 방법 즉, 상관

 Thread 클래스

개요 스레드 (1)

    

 스레드는 세 가지 영역에 대한 정보를 포함합니다 : 기본 정보, 자신의 행동을 스레딩을, 작업을 스레드

    

 1.1 기본 정보

다음과 같은 기본 정보를 포함
  • 이름, ID, 우선 순위, 상태, 스레드 그룹, 데몬 스레드 상태 및 스택 추적 정보
  • 컨텍스트 클래스 로더가 제공되는 예외 핸들러가 제공된다 
  • 그것은 현재의 thread가이 thread를 변경할 수있는 권한이 있는지, 살아있다

    

이름 : 스레드 이름을 지정하지 않을 경우,이 스레드 0, 스레드 1 ......... 생성, 속성 이름의 이름입니다 스레드-N 이 이름을

ID : 유추 사람들이 말하는, ID는 고유 식별자 ID 번호, 스레드입니다. 스레드 ID는 스레드를 만들 때 생성 된 양의 긴 번호, 스레드 종료는, ID는 재사용 할 수

优先级:线程默认的优先级是NORM_PRIORITY=5,一般情况下不需要设置优先级因为你设置了优先级并不一定总是完全按照你的想法进行,前面说过,Java线程是操作系统原生线程的映射,要依赖操作系统。

   如果设置的值不在有效范围内,直接抛出异常。万万不要业务逻辑依赖你自以为的线程优先级

状态:新建、就绪、运行、阻塞、结束

线程组:线程组用于对线程进行管理,ThreadGroup 线程组表示一个线程的集合。此外,线程组也可以包含其他线程组,线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组  

守护线程状态:可以将一个Thread标记为守护线程。守护线程,可以认为是后台线程。需要注意的是,必须是线程启动前设置,不然你试试看,分分钟  throw new IllegalThreadStateException()。

堆栈信息跟踪:待更......

上下文类加载器设置:待更新......

异常处理器设置:待更新......

是否存活:线程从启动之后,直到最终终止,这一个过程被称之为是活动状态换句话说,一个线程start之后,除非他被终止,否则任何时刻都是true。isAlive就是用于检测线程是否处于活动状态。

当前线程是否有权修改该线程:判定当前运行的线程是否有权修改该线程。比如线程Thread aThread,在main方法中调用aThread.checkAccess,此时当前线程是主线程main,

              目标是aThread 那么就是检测主线程是否有权利修改线程aThread。


 1.2 线程行为

  Thread中的方法,有一些是线程本身的行为控制或者通信,另外还有一些相当于是工具类。

    

currentThread: 返回对当前正在执行的线程对象的引用,线程是Thread,哪个Thread正在运行,那么就返回哪个对象就好了,返回类型就是Thread。

activeCount:返回的是当前线程,所在的线程组中,活动线程的个数

enumerate:线程的抽象是Thread,每一个线程都是一个Thread,既然是对象那么就有类似寻常对象的操作,比如保存到数组。enumerate就是用来讲当前线程的、所属线程组中的、以及子组中的每一个活动线程复制到指定的数组中,返回值为复制的线程的个数

是否持有指定监视器的锁:如同前面提到过的互斥量,Java中同步时需要用到一个对象锁,如果一个线程请求的锁被别的线程获得,那么就需要进行等待,持有了锁就可以进入临界区。

            方法用于判断当前线程,当前线程、当前线程。针对于某个对象,是否持有对应的锁,当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。


 1.3 线程任务 

  线程的任务核心是Runnable,内部持有一个Runnable target,构造时如果不进行设置那么为null。

调用start方法启动后,会调用run方法,如果不重写run方法,或者构造时不进程传递,那么target为null
很显然如果target,run方法就相当于一个空方法,也就是什么都不做。

 

 

 简言之,Java对于线程以及线程任务,进行了抽象分离,对线程的抽象为Thread,而对于线程任务的抽象就是Runnable


 

总结

  Thread中的方法主要用于对线程进行控制也可以用作通信,还有一些是基于类设计层面的,添加进来的一些工具类,可以对线程的一些信息进行控制、获取 线程任务是通过Runnable进行抽象,简言之,
  Thread表示线程,Runnable表示任务。
  “分别是为了更好地重逢”放到这里非常合适,解耦是为了更好地协作
  线程本身线程需要执行的任务进行分离,无论是从抽象概念上还是认知理解上,亦或者是二者独立的发展上,解耦都有多种好处。
    

 

 在Java这一面向对象的语言中,多线程编程就是“多Thread对象编程”

 

感谢:https://www.cnblogs.com/noteless/p/10354699.html

추천

출처www.cnblogs.com/FondWang/p/11982795.html