Javaのマルチスレッドの作成およびステータス情報|音楽バイト

みなさん、こんにちは、私は再び勉強するJava乾燥を探して、越バイトうれしいです!前我々はについて話すマルチスレッドとJavaの長所と短所のコンセプト|音楽バイト、この記事では、マルチスレッド、マルチスレッドや状態のJavaを作成すると言うことになります。

まず、スレッドを作成

1、スレッドのサブクラスを作成します

作成:実行継承スレッドを書き換え+

開始:サブクラスのオブジェクトを作成すると、(.startオブジェクト)

スレッドは、サブクラスのインスタンスを作成し、runメソッドをオーバーライドし、実行する方法は、例えば、start()メソッドを呼び出した後に実行されます。

public class MyThread extends Thread { 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20); //模拟延时
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一边学习多线程");
} 
} 
public static void main(String[] args) {
//创建子类对象
MyThread myThread = new MyThread();
//启动线程
myThread.start();
//也可以创建匿名子类
Thread thread = new Thread(){ 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20);//模拟延时
} catch (InterruptedException e) { 
e.printStackTrace();
} 
System.out.println("一边玩QQ"); 
} 
} 
}; 
thread.start(); 
for(int i=0;i<10;i++){ 
try {
Thread.sleep(20); //模拟延时
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一边玩微信..."); 
} 
}
}复制代码

2、Runnableを(推奨)を実装

単一継承の制限を回避指向プログラミング・インタフェース、

作成:Runnableを+を達成するために、実行を書き換え

開始:静的プロキシスレッド

a)は、クラスオブジェクトを達成するために、実際の役割を作成するために、
エージェントの役割のThreadオブジェクト+実際の文字参照、作成、)bは
、c)のエージェントロール.startを()

本実施形態では、クラスjava.lang.Runnableのインターフェイスの新しいインスタンスの実装であり、実施例に記載の方法であってもよいです

スレッドのコール。

短所:メソッドのステートメントを実行し、ルールを書き換えることにより、戻り値を持たない、例外を作ることができません

public class MyRunnable implements Runnable { 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20); //模拟延时 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一边学习多线程"); 
} 
} 
public static void main(String[] args) { 
//使用代理创建线程 
Thread thread = new Thread(new MyRunnable()); 
//启动线程 
thread.start(); 
//也可以创建一个实现了Runnable接口的匿名类 
Runnable myRunnable = new Runnable(){ 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20);//模拟延时 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一边玩QQ"); 
 
} 
} 
}; 
Thread t = new Thread(myRunnable); 
t.start(); 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20); //模拟延时 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一边玩微信..."); 
} 
} 
} 复制代码


長所:戻り値は欠点を持つことができ、例外を宣言することができます。複雑な問題を書きます

public class Call { 
public static void main(String[] args) throws InterruptedException, ExecutionException { 
//创建线程 
ExecutorService ser=Executors.newFixedThreadPool(2); 
Race tortoise = new Race("老不死",1000); 
Race rabbit = new Race("小兔子",500); 
//获取值 
Future<Integer> result1 =ser.submit(tortoise) ; 
Future<Integer> result2 =ser.submit(rabbit) ; 
Thread.sleep(2000); //2秒 
tortoise.setFlag(false); //停止线程体循环 
rabbit.setFlag(false); 
int num1 =result1.get(); 
int num2 =result2.get(); 
System.out.println("乌龟跑了-->"+num1+"步"); 
System.out.println("小兔子跑了-->"+num2+"步"); 
//停止服务 
ser.shutdownNow(); 
} 
} 
class Race implements Callable<Integer>{ 
private String name ; //名称 
private long time; //延时时间 
private boolean flag =true; 
private int step =0; //步 
public Race() { 
} 
public Race(String name) { 
super(); 
this.name = name; 
} 
public Race(String name,long time) { 
super(); 
this.name = name; 
this.time =time; 
} 
@Override 
public Integer call() throws Exception { 
while(flag){ 
Thread.sleep(time); //延时 
step++; 
} 
return step; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public long getTime() { 
return time; 
} 
public void setTime(long time) { 
this.time = time; 
} 
public boolean isFlag() { 
return flag; 
} 
public void setFlag(boolean flag) { 
this.flag = flag; 
} 
public int getStep() { 
return step; 
} 
public void setStep(int step) { 
this.step = step; 
} 
} 复制代码


ステータス第二に、スレッドおよび情報

1、5つの状態

1)、未完成の状態:新新
2)、レディ状態:Runnableを
。3)、動作状態:実行している
。4)、ブロックされた状態:ブロックされた
。5)、終了する:死にました

選手のレースと同様に、

1)、新入生の状態:選手は、選択した
準備ができて、)2:銃声の後、すぐに走っていない、操作を実行する良い仕事をする、スタートラインに来て、応答時間を持っている必要があります。
反応終了後、実行するために始めた:3)、動作状態は
)4を、状態をブロック:道端の石がつまずい、すぐにアップ実行、いくつかの単語、キック石をつぶやきながら、すぐに再入力準備応答に実行されません。
5)、状態を終了する:上、仕上げ、および停止するように、ゆっくりと歩きます。


2、閉塞:睡眠

ネットワーク遅延をシミュレートし、各オブジェクトが排他的ロックを持っている、ロックが解除されることはありません

class Web12306 implements Runnable { 
private int tickets =20; //假设20张票 
private boolean flag =true; 
@Override 
public void run() { 
while(flag){ 
if(tickets>=0){ 
try { 
//模拟延时 
Thread.sleep(200); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println(Thread.currentThread().getName()+"-->抢票"+tickets--); 
}else{ 
flag =false; 
} 
} 
} 
public static void main(String[] args) { 
//真实角色 目标 
Runnable target =new Web12306(); 
//代理角色 Thread +真实角色的引用 
Thread proxy1 =new Thread(target,"黄牛A"); 
Thread proxy2 =new Thread(target,"路人甲"); 
//代理行为 
proxy1.start(); //启动线程 
proxy2.start(); //线程不安全,数据有问题 
} 
}复制代码


3、終了

あまりにも暴力的、冷たい水はそれを停止し、Destoryはメソッドを停止呼び出さないでください。

、正常に終了、サイクルの数に達しました

B、外部からの介入

1)、スレッド識別子が追加- >項目
2)身体変化に使用されるスレッド識別子- >無限ループ
3)、外部認証方式変更変化のsetXXX()終了()Aを()...与える
。、4)適切な時間に応じて外部の呼び出し方法


4、現在のスレッド

Thread.currentThread()

5、優先順位

確率を表し、絶対的な順序を意味するものではありません

MIN_PRIORITY:1

NORM_PRIORITY:5デフォルトの優先順位

MAX_PRIORITY:10

getPriority()setPriorityを()


マルチスレッドについて、ここで紹介し状態を作成し、我々はマルチスレッド同期とスレッド間通信言う次回は、音楽のバイトに注意してください、オリジナルの記事、ソースを明記してください。


おすすめ

転載: juejin.im/post/5d4d2deaf265da039401f731