Javaのマルチスレッド・ノヴェッラ() - スレッドの詳細

簡単な紹介

  要するに、現在のJDKのスレッドモデルベースのオペレーティングシステムのネイティブスレッド、モデルはWindowsとLinuxのスレッドモデルに加えて、スレッドのシステムサポートを動作させるに依存している、1つ1つを提供することです
  それは単にその次のとおりです。
    今、Javaスレッドとオペレーティング・システムのスレッド対1のマッピング
    今、Javaスレッド、ある、オペレーティングシステムのスレッド
 
いくつかはスレッドです スレッドはJavaスレッドの抽象的な記述である、それはスレッドのためのマルチスレッドプログラミングモデルでなければなりません。かかわらず、ジャワの顔を実行する方法を最後に、マッピングする方法を最終的にオペレーティングシステムのJVMのスレッドの、プログラマは、単にスレッドを見ることができます。

マルチスレッド開発は、Threadオブジェクトを操作しています

  単にこれはThreadクラスであることを言って、彼はプロパティフィールドを持つ抽象モデルを通し、そこに公共の方法があるが、また、ネジ付きタスク(Runnableを)をパッケージ化し、スレッドを設定するために、彼はあまりにも多く、それらの項目を設定することはできませんが、
   だから、限り、あなたはスレッドの抽象モデルを理解し、そしてあなたが設定する必要がスレッドをクリアすることができるようになります。
   ソリューションは、モデルは、そのようなルーチン中にチェスをプレイするようなもので、あなたがより良く、より速く行うことができ、より包括的な書き込みアプリケーションをマルチスレッドプログラミングマルチスレッド。
Threadオブジェクトを作成し、Threadオブジェクトを使用し、その後、非常にシンプルではないと思われます。それは、複数のスレッド、マルチスレッド、マルチインタラクティブな方法でマルチスレッドであるため、スレッドを操作するためのいくつかの方法はまた、知能のテストで、必然的に私たちが修正することができますどのように複雑なコラボレーション・ロジックの様々な、そして効率的な組織が生成されます、あります。 

:Javaは、論理スレッドのスレッドのコアスレッド制御スレッド同期スレッド通信を

  • 情報の処理を制御することである、名前、ID、優先度、ステータス、等のような独自の特性を有するスレッドクラス自体のため;
  • スレッドカプセル化されたタスクは、Javaは揮発性のキーワードは同期プロセスで共有リソースへのアクセスを制御するために使用され、同期提供します。
  • そのような結合として作用する(そしてオブジェクトから継承)のいくつかのためのスレッド、通信処理と同等のものを待ちます。

    

 

最終的にはJavaのマルチスレッドプログラミング、それは何ですか?

  そんなにので、最終的には最終的にJavaのマルチスレッド、というプログラミングは何ですか?私たちは二つのステップ「という以前言ったThreadオブジェクトを作成するには、Threadオブジェクトを使用します。」
  これらの2つの部分は、糸自体の制御および治療ですが、Threadオブジェクトを使用しているとき、我々はスレッドを使用する理由それは、最も重要な部分がありますか?
  タスクを実行しませんか?
    それは共有リソースへのアクセスになるので、問題は同期のプロセスに関連している場合ので、マルチスレッドコードは、もはや単純なので、簡単な作業ではありませんので、したがって、コードの使命は、また非常に重要です。
  あなたは部品がはるかに良くなるかを理解すれば、Javaのマルチスレッドを学びます。
、Threadクラスそのものである第一の部分、抽象的な概念やスレッドのスレッド・サポート・オペレーションのJavaの制御方法の明確な理解---。
第二部、キーワード完全な理解を同期されているJava同期論理の明確な理解。
理解抽象Javaスレッド通信ロジックを明確にするために第3のセクション、例えば待機などすなわち相関法

 Threadクラス

1.スレッドの概要

    

 スレッドは、3つのエリアに関する情報が含まれます。基本的な情報、彼らの行動をスレッドを、タスクのスレッド

    

 1.1基本情報

次の基本的な情報を含めます
  • 名前、ID、優先度、ステータス、スレッドグループ、デーモンスレッドの状態、およびスタックトレース情報
  • コンテキストクラスローダが提供され、例外ハンドラが提供されています 
  • これは、現在のスレッドがこのスレッドを変更する権限を持っているかどうか、生きています

    

名前:スレッドが属性名の名前で、名前を指定しない場合、それはスレッド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