「JavaBasicIntroduction 2ndEdition」-ダークホースプログラマーの授業後の回答と詳細な説明第10章マルチスレッド

1.空欄に記入します

1、Thread、Runnable、Callable
2、synchronized、this
3、NEW(新建状态)、RUNNABLE(可运行状态)、BLOCKED(阻塞状态)、WAITING(等待状态)、TIMED_WAITING(定时等待状态)、TERMINATED(终止状态)
4、开启一个新线程、run()方法
5、setDaemon(true)、start()

2.正誤問題

1、错   2、对   3、对   4、错   5、对

3つの複数の選択肢の質問

1、AC     2、BC      3、ABC     4、C      5、ABCD

4つの短い答えの質問

1. 1つは、java.langパッケージの下のThreadクラスを継承し、Threadクラスのrun()メソッドを上書きし、run()メソッドでスレッド上で実行されるコードを実装することです。
new Thread(){ public void run(){} } .start();もう1つは、java.lang.Runnableインターフェイスを実装することです。これは、run()メソッドのスレッドで実行されるコードも実装します。クラスMyThreadはRunnableを実装します{publicvoid run(){} }もう1つは、java.util.concurrent.Callableインターフェイスを実装することです。これは、call()メソッドのスレッドで実行されるコードも実装します。クラスMyThreadはCallableを実装します{publicObject call()throws Exception {} }












2. sleep(long millis)メソッドを呼び出すと、実行中のスレッドは積極的にCPUを放棄して他のスレッドを実行します。sleep(longmillis)メソッドで指定された時間が経過すると、CPUはこのスレッドに戻り、実行を続行します。スレッドは同期ロックに入り、sleep(long mills)メソッドはロックを解除しません。現在のスレッドがsleep(long mills)メソッドを使用してCPUを放棄しても、同期ロックによってブロックされた他のスレッドは実行できません。wait()は、同期ロックに入ったスレッドで呼び出され、現在のスレッドが一時的に同期ロックを放棄できるようにして、このロックを待機している他のスレッドが同期ロックを取得して実行できるようにします。他のスレッドがnotify()またはnotifyAll()メソッドを呼び出すと、wait()メソッドを呼び出したスレッドは待機状態を解放します。同期ロックが再度取得されると、プログラムは引き続きダウン実行できます。

3.シングルスレッドプログラムは、main()メソッドのエントリからプログラムの最後まで実行されます。プロセス全体は順次実行できます。プログラムのどこかに問題があると、プログラム全体がクラッシュするため、シングルスレッドプログラムを意味します。いくつかの側面における脆弱性と制限。

5、プログラミングの質問

1.public class Test01 {
    
    
	public static void main(String[] args) {
    
    
Teacher t = new Teacher();
		new Thread(t, "陈老师").start();
		new Thread(t, "高老师").start();
		new Thread(t, "李老师").start();
	}
}
class Teacher implements Runnable {
    
    
	private int notes = 80;
	public void run() {
    
    
		while (true) {
    
    
			dispatchNotes(); // 调用售票方法
			if (notes <= 0) {
    
    
				break;
			}
		}
	}
	private synchronized void dispatchNotes() {
    
    
		if (notes > 0) {
    
    
			try {
    
    
				Thread.sleep(10); // 经过的线程休眠10毫秒
			} catch (InterruptedException e) {
    
    
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + "---发出的笔记"
					+ notes--);
		}
	}
}
2.public class Accumulator extends Thread {
    
    
	private int stratNum;
	public static int sum;
	public Accumulator(int startNum) {
    
    
		this.stratNum = startNum;
	}
	public static synchronized void add(int num) {
    
    
		sum += num;
	}
	public void run() {
    
    
		int sum = 0;
		for (int i = 0; i < 10; i++) {
    
    
			sum += stratNum + i;
		}
		add(sum);
}
	public static void main(String[] args) throws Exception {
    
    
		Thread[] threadList = new Thread[10];
		for (int i = 0; i < 10; i++) {
    
    
			threadList[i] = new Accumulator(10 * i + 1);
			threadList[i].start();
		}
		System.out.println("Sum is : " + sum);
	}
}

6、元の質問とその分析

何もありません。

おすすめ

転載: blog.csdn.net/hypertext123/article/details/109315228