今日、私は Java でのマルチスレッドの実装を学び始めました。
スレッドは、並列かつ独立して実行できるコードです。以前に作成したプログラムは、1 つのスレッドしか実行できませんでした。プログラミングとは、プログラムのタスクを、互いに干渉することなく同時に実行できる複数の並列サブタスクに分割することです。格闘ゲームでは、2 人の戦いが 2 つのスレッドによって実現されます。あなたの動きを使ってください、そして私は私の衝撃波を送りますか?
(1 月 18 日) 突然疑問が浮かんだので付け加えたいのですが、マルチスレッドは私たちが通常マルチタスクと呼ぶものですか?
簡単に言うと、マルチスレッドはプロセス内で複数のスレッドを並行してスケジュールするためのメカニズムを提供し、マルチタスクはオペレーティング システム内で複数のプロセスを実行するためのメカニズムを提供します。マルチタスク オペレーティング システム (Windows など) とは、オペレーティング システムが CPU のタイム スライスを複数のスレッドに割り当て、各スレッドがオペレーティング システムによって指定されたタイム スライス内で完了することです (ここでの複数のスレッドはオペレーティング システムは、あるスレッドの実行から別のスレッドの実行に継続的に切り替えます。マクロの観点からは、これらの複数のスレッドが異なるプロセスに属しているように見えます。私たちの観点からすると、複数のプロセスが同時に実行され、マルチタスクが実現されているように見えます。
上で述べたように、マルチスレッドとマルチタスクには明確な違いがあります。しかし、もう一度考えてみてください。アプリケーションでのマルチスレッドの実装も、CPU によるタイム スライスの割り当てに依存しているのではないでしょうか?プログラムが開始され、すでに 1 つのスレッドが存在します。 動作中、次の例を使用して、スレッドの実際の印象を最初に確立できます。 currentThread();
t.setName(" このスレッドは実行中です");
System.out.PRintln("実行中のスレッド:"+t);
try{
for(int i=0;i<5;i++ )
{
System.out.println( "Sleep time"+i);
Thread.sleep(1000);//スレッドを一時停止するとは、システム リソースを占有せずにスレッドをしばらく休ませ、他のスレッドが続行できるようにすることを意味します。ここのスレッドはデフォルトでメインスレッドになります
}
}catch(InterruptedException e){System.out.println("thread has lower");}
}
}
これは 1 つのスレッドにすぎないため、複数のスレッドを実装するにはどうすればよいですか? そして、スレッドに実行させるにはどうすればよいでしょうか?
スレッド本体の構築を実現するには 2 つの方法があります
1 つ目は、スレッド本体を構築し続けることです。 Java の Thread クラスであり、このクラスには run() 関数があり、スレッドによって完了する操作に従って、通常は run() 関数が呼び出されるメイン関数のようなものです。このクラスを継続することで、独自のスレッドを定義し、それが何をすべきかを伝えることができます。 次のプログラムは、HelloWorld を出力するために 2 つのスレッドを使用する、SimpleThread クラスの続きです。 public class TwoThread{
public static void main(String args[]){
new SimpleThread("HelloWorld1" ).start();//2 つのスレッド インスタンスを作成します。これは単純です
new SimpleThread("HelloWorld2").start ();
}
}
class SimpleThread extends Thread{ file://実際の内容はここにあります
public SimpleThread(String str){
super(str);//superはSimpleThreadクラスの直接の親クラスを表します、ここに Thread があります
}
file://スレッドに実行してもらいたいことはすべてここにあります
public void run(){
for(int i=0;i<10;i++){
System.out.println( i+" "+getName());
try{
sleep((int)(Math.random() *1000));
}catch(InterruptedException e){}
}
System.out.println("完了! "+getName());
}
}
実行の結果は、2 つのスレッドがそれぞれの HelloWorld を交互に 10 回表示します。2 つのスレッドは同時に実行されているため、出力は混合されます。 2 番目のメソッドは次のとおりです。起動インターフェイスを介してスレッド本体を構築するには、以下の twothread クラスなど、起動インターフェイスを実装する任意のクラスで、このクラスの定義に run 関数を追加するだけで実現できます。ルーチンは次のとおりです
class TwoThreadimplements Runnable{
TwoThread(){
Thread t1=Thread.currentThread();
t1 .setName("最初のメインスレッド");
System.out.println("実行中のスレッドthead:"+t1);
Thread t2=new Thread(this,"2 番目のスレッド");//ここで注目してください。これは、新しいスレッド t2 が何を行うかがこのオブジェクトによって決定されることを示しています。これは、twothread の run 関数によって行われます
System.out.println("create another thread");
t2.start();// この関数を呼び出すと、スレッドが run 関数から実行を開始します
try{
System .out.println("最初のスレッドはスリープします");
Thread.sleep(3000);
}catch(InterruptedException e){System.out.println ("最初のスレッドが間違っています");}
System.out.println ("最初のスレッドの終了");
}
public void run()//このプログラムの新しい t2 である run() 関数を定義します スレッドは
{
try{
を実行しますfor(int i=0;i{
System.out.println("スレッド 2 のスリープ時間:"+i);
Thread.sleep(1000);
}
}catch(InterruptedException e ){System.out.println("スレッドが間違っています");}
System.out.println("2 番目のスレッドの終了");
}
public static void main(String args[]){
new TwoThread(); //コンストラクターをトリガーします
}
}
実行結果は次のとおりです:
実行中のrhread:Thread[最初のメインスレッド,5,main]
別のスレッドを作成します
最初のスレッドはスリープします
スレッド2のスリープ時間: 0
スレッド 2:1 のスリープ時間
スレッド 2:2 のスリープ時間
最初のスレッドの終了
スレッド 2:3 のスリープ時間
2 番目のスレッドの終了
他のことについてのたわごとに気づきました。多くの Java プログラムは先頭に import ステートメントを持っていますが、これは C の #include や Delphi の使用法と非常によく似ています。Import は Java のキーワードであり、パッケージは一連のクラスとインターフェイスで構成されます。名前の競合を避けるためのツールである Space は、主に次のような多くのパッケージを提供します:
java.applet
アプレットを設計するためのクラス
java.awt
ウィンドウ ツール パッケージ、GUI要素を生成するためのクラスを含む
java.io
ファイル入力および出力クラス
java.lang
Java言語クラス(オブジェクト、スレッド、例外出口、システム、整数、原点、数値、文字などを含む)
java.net
SocketクラスとTCP/ip関連クラス
java.util
いくつかのプログラム同期クラス
...
夕方、基本要素としてのJavaクラスの概念をざっと見てみました。オブジェクト指向プログラミングでは、クラスの考え方が C++ により顕著に反映されています。C++ は手続き型言語との互換性を維持していますが、Java プログラムには完全にオブジェクト指向のクラスしかありません。たとえば、文字列「hello」もオブジェクトであり、「Hello」.equalsIgnoreCase() を呼び出して、それが他の文字列と同じかどうかを判断できます。C で通常見られるメイン プログラム Main も、クラスの基本プロパティは Java にあります。この実施形態は、オーバーロード、継続、ポリモーフィズムにすぎません。オーバーロードとは、同じ名前と異なるパラメータを持つメンバー関数を作成することを指します。これは、水平継承を意味します。祖先クラスからの変数とメンバー関数 (垂直的) ポリモーフィズムの例 一般に、プログラムの実行中に、インスタンス変数は、必要に応じて親クラスのインスタンスとして表示されるか、サブクラスのインスタンスとして表示されるかを選択できます。これらのことについて書くと、より多くの刺激が脳に与えられ、よりしっかりと記憶されるようになります。これは、前回就職活動に応募したとき、試験官にオブジェクト指向の特徴を尋ねられたようなことを避けるためです。全部に答えることができず、とてもイライラしました
以上は Java 学習初心者向けのメモ (3) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www. php.cn)!