マルチスレッドの理解と使用の概要

零下一度
リリース: 2017-06-30 09:50:54
オリジナル
3293 人が閲覧しました

1. Word 部分:

①プロセス ②現在の現在のスレッド ③スレッド 実行可能 取得可能

⑤割り込み ⑥結合 結合 ⑦生成される ⑧同期が同時に発生

2. プレビュー部分

1. プロセスは です。システムを実行するプログラムの基本単位

スレッドは、プロセス内で操作を実行するための最小単位です

2. スレッドを作成する2つの方法を説明します

①スレッドクラスを継承する

②Runnableインターフェイスを実装する

3.ライフサイクルはいくつかの段階に分けられますが、それぞれの段階は何ですか? 5 つの段階: ① 作成 ② 準備完了 ③ 実行 ④ ブロック ⑤ 終了

4. スレッドのスリープ、スレッドの強制を設定できるスレッドの使用方法、そしてスレッドの好意ですか?

それらは: sleep()、join()、yield()です

5. スレッドを同期するにはいくつかの方法があります

アクセスの競合は 2 つの方法で行う必要があります

: ① 同期メソッド ② 同期されたコードブロック

3. 演習部分

1. Thread クラスを継承するメソッドを使用してスレッドを作成し、対応するコンテンツを表示します

まずスレッド クラスを作成します:

package oneOne;

public class MyRunnableone extends Thread{

public void run() {

for(int i=1;i<=20;i++){

System.out.println (i+".Hello, from thread"+Thread.currentThread().getName() );

}
}
}

メインメソッドクラスを再度作成して削除

package oneOne;

public class testone {

/**

* @param args

*/

public static void main(String[] args) {

// TODO 自動生成メソッド スタブ
MyRunnableone my=new MyRunnableone();
MyRunnableone my1=new MyRunnableone();
my.start();
my1.start();
}

}

2. Runnable インターフェースを実装してスレッドを作成します

最初のものと同じ: 最初に実装クラスを作成します:

package oneTwo;

public class MyRunnabletwo は Runnable{

public void run() {

for(int i=1; i<=20;i++){

System.out.println(i+".Hello, from thread"+Thread.currentThread) を実装します().getName());

}
}


}

メインメソッド:


package oneTwo;

public class testtwo {

/**

* @param args

*/

public static void main( String[] args) {

// TODO 自動生成メソッド スタブ
MyRunnabletwo my=new MyRunnabletwo( );
MyRunnabletwo my1=new MyRunnabletwo();
Thread tr=new Thread(my);
Thread tr1=new Thread( my1);
tr.start();
tr1.start();
}

}

3. マルチスレッドを使用して複数人でのハイキングをシミュレートします

まず、継承または実装クラスを作成します (ここでは継承を使用しました) ):

package oneThree;

public class MyRunnablethree extends Thread{

private int time;

public int num =0;

public MyRunnablethree(String name,int time,int kio) {

super(name);
this. time=time;
this.num=kio*1000/100;

}
public void run() {

while (num>0) {
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO: 例外を処理します
e.printStackTrace();
}
System. out.println(Thread.currentThread().getName()+"100 メートル登りました! ");

num--;
}
System.out.println(Thread.currentThread().getName()+"最後に到着しました!");
}

}

残りのメソッド:

パッケージoneThree ;

public class testthree {

/**

* @param args

*/

public static void main(String[] args) {

// TODO 自動生成メソッドスタブ
MyRunnablethree young=new MyRunnablethree("Young man" , 500, 1);
MyRunnablethree old=new MyRunnablethree("高齢者", 1500, 1);
MyRunnablethree child=new MyRunnablethree("Child", 600, 1);
System.out.println("**** ******登山開始 *********");
old.start();
young.start();
child.start();
}

}

4.スレッド優先度の表示、設定

まずクラスを継承または実装します:

package oneFour;

public class MyRunnablefour extends Thread{

public void run() {

Thread.currentThread().setPriority(1);

System.out .println("サブスレッド名: "+Thread.currentThread().getName()+"、優先順位: "+Thread.currentThread().getPriority());

}
}



次にメイン:

package oneFour;

public class test4 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成メソッド スタブ
MyRunnablefour myf=new MyRunnablefour();
myf.start();
System.out .println("******************デフォルトの優先度を表示********");
System.out.println("メインスレッド名:" +Thread.currentThread( ).getName()+",Priority: "+Thread.currentThread().getPriority());
Thread.currentThread().setPriority(10);
System.out.println("** **** *****デフォルト優先度変更後**********");
//myf.setPriority(1);
System.out.println("メインスレッド名: " +Thread.currentThread().getName()+"、優先度: "+Thread.currentThread().getPriority());
//System.out.println("サブスレッド名: "+MyRunnablefour.currentThread() .getName( )+", priority: "+MyRunnablefour.currentThread().getPriority());


}

}

5. 医師への電話と診察をシミュレートします

まず、クラスを継承または実装します。

package oneFive;

public class MyRunnablefive extends Thread{
private int time;
//public int pertail=0;
public MyRunnablefive(String common,int time) {
super(common);
this.time=time ;

}
public void run() {
Thread.currentThread().setPriority(8);
for(int i=1;i<=10;i++){
try {
Thread.sleep(this.time) );
} catch (InterruptedException e) {
// TODO: 例外を処理します
e.printStackTrace();
}
System.out.println("特別番号: "+i+" の患者さんが診察中です! ");

}
}

}

remain:

package oneFive;

public class testfive {

/**
* @param args
*/
public static void main(String[] args) {
/ / TODO 自動生成メソッドスタブ
//MyRunnablefive pertail=new MyRunnablefive("特別な番号", 1000);

Thread temp=new Thread(new MyRunnablefive("特別な番号", 400));
temp.start( ) ;
Thread.currentThread().setPriority(4);
for(int i=1;i<=50;i++){

if(i==11){

try {
temp.join() ;
} catch (InterruptedException e) {
// TODO: 例外を処理します
e.printStackTrace();
}
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto -生成された catch ブロック
e.printStackTrace();
}
System.out.println("通常番号: "+i+" 患者が診察を受けています");

}

}
}

6. threading リレーレースをシミュレートします

最初に継承クラスまたは実装クラスを作成します:

package oneSix;

public class runSiximplements Runnable{
private int meter=1000;
public runSix(){


}
@Override
public void run( ) {
// TODO 自動生成メソッド stub
//System.out.println("Coming in");
while (true) {
//type type = (type) true.nextElement();
synchronized (this) {
if(meters Break;

}
System.out.println(Thread.currentThread().getName()+" バトンを受け取りました! ");
for (int i = 0; i try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"ran"+(i+10)+"メートル!");
}
メートル-=100; }
}
}

}

メインインターフェイスクラス:

package oneSix;

public class testingix {

/**

* @param args
*/
public static void main(String[] args) {
/ / TODO 自動生成メソッド スタブ
runSix ru=new runSix();
for (int i = 0; i new Thread(ru,(i+1)+"number player") 。 start();
}
}

}

7. オンラインチケット購入のマルチスレッドシミュレーション

Taopaopao、Zhangtiao、ダフ屋が共同でチケット10枚を取得し、ダフ屋がチケットを1つだけ取得できるように制限します

最初に継承を作成するか、実装クラス:

package oneSeven;

public class siteSeven は Runnable{
private int count=10;
private int num=0;
private boolean flag=false;

@Override
public void run() {
// TODO 自動生成されたメソッド スタブ
/ /System.out.println("Coming in");
while (!flag) {

synchronized (this){
//System.out.println("Coming in");
if(count<=0) {
flag=true;
return;
}
num++;
count--;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e. printStackTrace();
}
String name=Thread.currentThread().getName();
if(name.equals("Scalper")){
System.out.println(name+"最初の"+num+" 個のチケットを取得します) 、 "+count+" 枚のチケットが残っています! ");
Break;
}
System.out.println(name+""+count+" 枚のチケットを獲得しました、"+count+" 枚のチケットが残っています!");
}
}
}

}

メインインターフェイスクラスを再度作成します:

package oneSeven;

public class testingeven {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto -生成されたメソッド スタブ
siteSeven si=new siteSeven();
Thread per1=new Thread(si,"Dadong");
Thread yellow=new Thread(si,"Scalper");
Thread per2=new Thread(si, "Qizhen");
per1.start();
yellow.start();
per2.start();
}

}

4: 概要:

1.Thread クラスのメソッドは、次の操作を実装します。スレッドオブジェクト

①スレッドの優先順位を調整

②スレッド sleep sleep()

③スレッドに join() を強制実行

④スレッド礼儀 yield()

2. プログラマーが最大化できる効率的なプログラムを作成できるようにします。 CPUの使用

3. スレッドを作成する2つの方法:

①Threadクラスを継承するサブクラスを宣言し、Threadクラスのrun()メソッドを実装する

②Runnableインターフェースクラスを実装するスレッドを宣言し、 run() メソッドを実装します

以上がマルチスレッドの理解と使用の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート