java スレッドの詳しい説明とスレッドとプロセスの違い
1.プロセスとスレッド
各プロセスは独自のメモリ空間を持ち、1つのアプリケーションは同時に複数のプロセスを起動できます。たとえば、IE ブラウザの場合、IE ブラウザを開くことはプロセスを開始することと同じです。
スレッドは、プロセス内の実行フローを指します。プロセスには複数のスレッドを含めることができます。
各プロセスは、オペレーティング システムが独立したメモリ領域を割り当てる必要があり、同じプロセス内の複数のスレッドがこの領域、つまり共有メモリやその他のリソースを共有します。
java.exe が呼び出されるたびに、オペレーティング システムは Java 仮想マシン プロセスを開始します。Java 仮想マシン プロセスが開始されると、Java 仮想マシンはメイン スレッドを作成し、プログラム エントリの main メソッドから実行を開始します。 。
Java 仮想マシンはスレッドを開始するたびに、関連情報 (ローカル変数など) を保存するためにスレッド メソッド スタックをスレッドに割り当て、スレッドはこのスタック上で実行されます。したがって、Java オブジェクトのローカル変数はスレッドセーフですが、インスタンス変数とクラス変数はスタックに保存されないため、スレッドセーフではありません。
プロセスには、準備完了、実行中、ブロックという 3 つの状態があります。
2. スレッド作成メソッド
実行可能なメソッド: (このメソッドは柔軟であり、推奨されます)
public class Thread02 implements Runnable { public static void main(String[] args) { Runnable r = new <strong>Thread02</strong>(); Thread t1 = new Thread(<strong>r</strong>, "t1"); /** * Thread源码 * public Thread(Runnable target, String name) { init(null, target, name, 0); } */ Thread t2 = new Thread(r, "t2"); t1.start(); // 启动线程t1,处于就绪状态,等待cpu t2.start(); // 启动线程t2,处于就绪状态,等待cpu t1.run(); // 主线程main调用对象t1的run方法 } public void run() { System.out.println("thread's name is " + Thread.currentThread().getName()); } }
実行結果は次のようになります:
thread's name is t1 thread's name is main thread's name is t2
Thead メソッド
public class Thread03 extends Thread { public static void main(String[] args) { Thread03 t1 = new <strong>Thread03</strong>(); //不注意的情况下写成了Thread t1=new Thread() 注:Thread03此时就是一个线程了 t1.start(); } public void run() { System.out.println("thread's name is " + Thread.currentThread().getName()); } }
実行結果:thread の名前は Thread-0 です
注: カスタム スレッドに加えて、プログラムが実行されるたびにメイン スレッドも存在します。
総合:
public class Thread01 { public static void main(String[] args) { Thread thread=new Thread(); thread.start();//真正起作用 的是run() /**而Thread中的run * public void run() { if (target != null) { target.run(); } } 所以自己创建的线程要重写run方法,把要执行的内容放到run()中,所以要实现接口或继承进而产生子类 */ //创建线程的方式1 thread子类方式(继承) Thread thread1=new Thread(){ public void run() { while(true){ try { Thread.sleep(500);//休息500毫秒 } catch (InterruptedException e) { e.printStackTrace(); } //Thread.currentThread()得到当前线程 System.out.println("线程1的名字是 "+Thread.currentThread().getName()); } } }; // thread1.start(); //不写 线程无法启动 //创建线程的方式2 runnable方式(实现) 推荐使用 Thread thread2=new Thread(new Runnable(){ public void run() { while(true){ try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread2'name is "+Thread.currentThread().getName()); } }}); // thread2.start(); //执行的是thread new Thread(new Runnable(){ public void run() { System.out.println("runnable "+Thread.currentThread().getName()); }}){ public void run() { //子类中的run方法覆盖父类中的run方法,这样就不会执行runnable System.out.println("thread "+Thread.currentThread().getName()); } }.start(); } /*** * 在单个cpu中执行多线程很有可能降低执行效率而不是提高 一个人在不同地方做同一件事情 */ }
読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!
Java スレッドの詳細な説明と、スレッドとプロセスの違いに関する関連記事については、PHP 中国語 Web サイトに注目してください。