ホームページ  >  記事  >  Java  >  Java マルチスレッドに関するディスカッション

Java マルチスレッドに関するディスカッション

巴扎黑
巴扎黑オリジナル
2017-07-20 13:24:491603ブラウズ

1. トピックの紹介

Java マルチスレッド メカニズムについて簡単に説明する前に、私の国の IT 業界におけるテクノロジー共有の雰囲気の悪さと、インターネット テクノロジーに対する答えの深さの貧弱さについて不満を言わなければなりません。 Java を初めて使用する男性が Java マルチスレッド メカニズム関連の問題について私に尋ねたとき、私は彼に Du Niang に助けを求めて、まずは自分で問題を解決する方法を教えてほしいと頼みましたが、彼は私にそれはできないと言いました。私もインターネットで情報を長時間検索しようとしましたが、詳細かつ明確に記載されている文書は見つかりませんでした。さらに残念なことは、特定の参照価値を持つ可能性のある一部の文書は、登録、返信、さらにはお金を出して購入するなどの異常な手段でダウンロードする必要があることです。これでは必然的に多くの人が意欲を失い、最終的には何も起こりません。

私は意図的に批判しているわけではありませんが、Linux の自由の父であるストールマンのように、より多くの人が寄付を学ぶことができるようになることを願っています。誰もが寄付を試みることができれば、最終的には誰もが寄付を求めることが容易になります。

(今後も時間があるときに、Java のナレッジポイントを分類してまとめ、CSDN 個人ブログに掲載していきます。Java に加えて、他のコンテンツの紹介も検討しますので、よろしくお願いしますチューニングしました^(... )^)


2. 現実にも同じような問題があります

あなたがファーストフード店のオーナーであると仮定してください。あなたの懸命な努力のおかげで、ファーストフード店はようやく忙しくなりました。ビジネスが好調で、売上を拡大するために、宅配サービスを追加することにしました。会社の財務から、このビジネスの拡大に 120,000 元を割り当てることができると言われました。 ?

もちろん、制御にはさまざまな方法があり、制御では人数、食品の配達範囲、食品の配達形式、その他の問題を考慮する必要があります。ここでは食品の配達形式の詳細に焦点を当てます。

1) シボレーセイルを購入する;

2) バッテリーカーを 15 台購入する;

従業員の給与などの基本的な費用を差し引いた残りのお金は、2 種類の食品配達ツールの購入に使用されます。上記の食品配達車両にはそれぞれ独自の利点があります。第一に、シボレー セイルはより高速な食品配達速度を​​実現でき、第二に、食品配送車両としてバッテリー カートを使用すると、同時に複数の顧客に配送できます。時間も短縮され、配送コストも削減されます。明らかに安くなります。この 2 つの選択肢のうち、あなたならどちらを選びますか?

明らかに 2 番目のフードデリバリー車両の方がより実用的です。比較すると、後者の方がより多くの顧客を処理でき、後部の顧客の待ち時間が大幅に短縮されます。想像してみてください。電話してランチを注文したのに、あなたが 25 人目の顧客だったという理由だけで、午後 6 時にしか配達されなかったら、どう思いますか?

実際、ファーストフード レストランのオーナーが食品配達用に複数のバッテリー カートを選択する際の考慮事項は、プロセスにマルチスレッド制御を選択するという考えとまったく同じです。いくつかの特定の効率性においても私たちの期待に応えます。たとえば、複数の顧客が同時にサーバー データにアクセスしたい場合、単一スレッドではこのアイデアは無駄になります。シングル スレッドの場合は、複数の顧客のニーズがスタックに保存されて実行されます。後続の顧客がより良いアクセス エクスペリエンスを得ることが困難になります。

Java 言語は、優れたマルチスレッド サポートを提供します。マルチスレッド プログラムには複数の逐次実行ストリームを含めることができ、複数の逐次実行ストリームは互いに干渉しません。一般に、マルチスレッド プログラミングの使用には次の利点があります:

1) メモリ データを複数のスレッド間で共有できます。 2) 複数のスレッドが同時に実行され、複数のタスクを同時に完了できます。

3) Java 言語にはマルチスレッド関数サポートが組み込まれているため、Java でのマルチスレッド プログラミングが簡素化されます。

マルチスレッドの作成方法

(1) Thread クラスを継承する: 新しく作成されたスレッド クラスが他の親クラスを継承する必要があることを考慮すると、このメソッドは通常は使用されません

 MyThread

(2) を実装します。 Runnable インターフェイス: 最も一般的に使用されるメソッド

class MyThread implements Runnable{
  @Overridepublic void run(){      //do something here             }
}

(3) Callable インターフェイスの実装: このメソッドは、結果値を返す必要があるシナリオで使用されます。Collable インターフェイスを実装するには、その call( ) メソッド

 class MyThread implements Callable<String>{
  @Override
  public String call() throws Exception{
     //do something here
    return XXX;
  }
  
}

public class FutureMain{
  public static void main(String[] args){
    //构造FutureTask
    FutureTask<String> future = new FutureTask<String>(new MyThread());
    Thread t1 = new Thread(future);
    t1.start();
    //取得call()方法的返回值
    System.out.println("返回值"+future.get());
  }
}

もちろん、基本関数に加えて、JDK は Future 用にいくつかの簡単な制御関数も提供します:

boolean cancle(boolean mayInterruptIfRunning);                       //取消任务boolean isCancelled();                                               //是否已经取消boolean isDone();                                                    //是否已完成

以上がJava マルチスレッドに関するディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。