JAvaスレッド---初歩

2465 ワード

スレッドは何ですか?スレッドは2つの異なることを指します:1,java.lang.Threadの1つのインスタンス2であり、スレッドの実行は1つのThreadインスタンスが1つのオブジェクトにすぎない.Javaの他のオブジェクトのように、変数と方法を持ち、スタック上で生死を共にする.しかし、スレッドの実行時には個別のプロセスがあり、独自の呼び出しスタックがあります.各スレッドには独自の呼び出しスタックがあります.異なるJVMは、スレッドを異なる方法で実行することができます.たとえば、1つのjvm上で、各スレッドが時間分割で実行される場合がありますが、切り替えを行うには、1つのスレッドの実行が完了することを保証しなければならないJVMもあります.初期化スレッドインスタンス:Thread t=new Thread()またはRunnable r=new MyRunnable();Thread t = new Thread(r); 注意Thread自体はRunableインタフェースを実現しているので、threadをThread t=new Thread()とすることができる.を行ないます.注意スレッド実行の順序は保障されておらず,startのthreadを先に呼び出すとは限らず,必ずrunを先に呼び出す.スレッドがrunメソッドを実行すると、スレッドのスタックが解散する実行プロセスではありません.スレッドがすでに起動している場合、startメソッドの起動を再度呼び出すことができず、異常なIllegalThreadStateExceptionが発生します.スレッドのスケジューリング順序に影響を与える方法はいくつかあります.影響であり、制御ではなく、JVMだけがスレッドのスケジューリングを本当に制御できることを覚えておいてください.Threadクラスからのメソッド:public static void sleep(long sleeptime)throws InterruptedException public static void yield()public final void join()throws InterruptedException public final void setPriority(int newPriority)Objectクラスにあるメソッドは、public final void notify() public final void notifyAll() public final void wait()throws InterruptedException
package threadExamples;

class Printer implements Runnable {

	private String message;

	public Printer(String s) {
		this.message = s;
	}

	@Override
	public void run() {

		for (int i = 0; i < 1000; i++) {
			System.out.println(message);
		}
	}

}

class MyThread extends Thread {
	public void run() {
		for (int i = 0; i < 500; i++) {
			System.out.println("Nice");
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			} //       ,   run   sleep
		}
		System.out.println("End of mythread");
	}
}

public class Main {

	public static void main(String[] args) throws InterruptedException {//   
		 MyThread t = new MyThread();
		 t.start(); //    ,         
		
		for (int i = 0; i < 1000; i++) {
			System.out.println("Good");
		}
		
		
		
		Printer p = new Printer("*");
		Printer p1 = new Printer("+");

		p.run();
		p1.run(); //   :    ,   main  run  ,       
		//      *,  +,             

		System.out.println("End of main");
	}

}