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; }
}
}
* @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();
}
}
最初に継承を作成するか、実装クラス: 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 サイトの他の関連記事を参照してください。