ホームページ >Java >&#&チュートリアル >Java - プロセスとスレッドの詳細な例
プロセスとスレッド
プロセスはプログラム (タスク) の実行プロセスであり、動的であり、リソース (共有メモリ、共有ファイル) とスレッドを保持し、リソースとスレッドのキャリアです。
スレッドはシステム内の最小の実行単位であり、同じプロセス内に複数のスレッドが存在し、スレッドはプロセスのリソースを共有します。
スレッド対話、対話方法には相互排他と同期が含まれます。
スレッドの共通メソッド
Javaのスレッドサポートは主にThreadクラスとRunnableインターフェースに反映されており、それらはすべてjava.langパッケージを継承しており、共通のメソッドrun()を持っています
。public class ArmyRunnable implements Runnable {//volatile保证了线程可以正确读取其他线程写入的值volatile boolean keepRunning = true; @Overridepublic void run() {while(keepRunning) {//发动五连击for (int i = 0; i < 5 ; i++) { System.out.println(Thread.currentThread().getName() + "进攻对方[" + i + "]"); }//暂停 Thread.yield(); } System.out.println(Thread.currentThread().getName() + "结束了战斗"); } }
相互排除の実装: syschronized (固有ロック)、syschronized は、他のスレッドがこの重要な領域に入って重要なリソースにアクセスできないように、コードにロックを追加することと同じです。
同期: あるスレッドの特定の条件が満たされないため、他のスレッドは特定の待機状態になります。その後、あるスレッドが何らかの方法で他のスレッドをウェイクアップします。 。 糸。
同期の実装: wait()/notify()/notifyAll()--Object オブジェクトのメンバーメソッド
Wait set はスレッドの休憩室
public void transfer(int from, int to, double amount) {//通过synchronized 关键字来实现互斥,synchronized既可以出现在方法之上,也能以块的形式出现在方法体之中//通过对lockObj加锁实现互斥//加锁操作是有开销的,多次加锁操作会降低系统的性能synchronized (lockObj) {//while循环,保证条件不满足时任务都会被条件阻挡,而不是继续竞争CPU资源while (energyBoxes[from] < amount) {try {//条件不满足,将当前线程放入锁对象(lockObj)上的wait set//wait set 是线程的休息室 lockObj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()); energyBoxes[from] -= amount; System.out.printf("从%d转移%10.2f单位能量到%d", from, amount, to); energyBoxes[to] += amount; System.out.printf("能量总和:%10.2f%n",getTotalEnergies()); //唤醒所有在lockObj对象上等待的线程 lockObj.notifyAll(); } }
状況
ロックと条件
スレッド安全性:原子性と可視性...
マルチスレッドプログラミングで一般的に使用される対話モデル
Java5の同時プログラミングツール
Java同時実行性の実践
以上がJava - プロセスとスレッドの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。