スレッドの共通操作
スレッド名の設定: setName()
スレッド名の取得: getName()
スレッド固有の ID: getId()
// 自定义线程名称 String threadName = "threadName"; // 构造方法方式 Thread thread = new Thread(() -> { System.out.println("线程名=" + Thread.currentThread().getName()); },threadName); // set方法方式 // thread.setName(threadName); System.out.println("线程唯一Id=" + thread.getId());
スレッド起動: start()
スレッドが生きているかどうかの判定: isAlive()
// 线程启动 thread.start(); System.out.println("是否为存活线程=" + thread.isAlive());
スレッドメソッド: run() /call()
スレッドが開始されると、メソッドが呼び出されます。スレッドがやりたいことは run/call メソッドに記述されており、直接呼び出す必要はなく、スレッドが起動した後に run()/call() を呼び出します。プログラムがスレッドを開始せずに run/call を直接呼び出す場合、そのプログラムはマルチスレッド プログラミングに属しませんが、通常のメソッドを直接呼び出す場合は現在のスレッドに属します。
現在のスレッド オブジェクトを取得します: currentThread()
現在のスレッドの非静的メソッドを操作するには、まずスレッド オブジェクトを取得する必要があります
// 获取当前线程对象 Thread currentThread = Thread.currentThread(); // 对当前线程做一些操作 System.out.println(currentThread.getName()); try { // sleep 静态方法则不需要 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
状態についてスレッド(ライフ期間)の制御動作については前回の記事を参照してください。
デーモン スレッド (バックグラウンド スレッド)
通常のスレッド (ユーザー スレッド) の保護者であるデーモン スレッドのタスクは、他のスレッドにサービスを提供することです。プロセス内にユーザー スレッドが存在しない場合、デーモン スレッドは意味を持たず、JVM も終了します。一般的なデーモン スレッドには JVM のガベージ コレクション スレッドが含まれ、オペレーティング システムの起動によりさまざまなモジュールのデーモン スレッドも開始されます。
スレッドをデーモン スレッドとして設定します: setDaeman()
注: このメソッドは start() メソッドの前に呼び出す必要があります
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("线程名="+Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } // 这一句不会打印出来,因为main线程(目前唯一的普通线程)等待1秒后已经结束了 System.out.println("守护线程的状态=" + Thread.currentThread().getState()); }); // 守护线程 thread.setDaemon(true); // 线程启动 thread.start(); System.out.println("是否为守护线程=" + thread.isDaemon()); }
スレッドのシリアル化
join() メソッドを実行しているスレッドは、メソッド を呼び出している スレッドが終了するまで ウェイクアップ待機状態 (WAITING) に入り、その後ウェイクアップ待機状態からウェイクアップ待機状態に変わります。実行可能な状態 (RUNNABLE)。 join() メソッドは Thread クラスのメソッドです。最下層は wait() メソッドを使用してスレッドの待機を実現します。スレッド isAlive() が false の場合、
でスレッドのシリアル化を実現します。 : 1 つのスレッドがスレッド オブジェクトの別の Join() を呼び出して、スレッドのシリアル化の実行を実装します。
例: 良い料理
public class DemoCooking { public static void main(String[] args) { Thread mainThread = Thread.currentThread(); // 1.买菜 Thread buyThread = new Thread(new CookingThread(mainThread,"买菜"),"buyThread"); // 2.洗菜 Thread washThread = new Thread(new CookingThread(buyThread,"洗菜"),"washThread"); // 3.切菜 Thread cutThread = new Thread(new CookingThread(washThread,"切菜"),"cutThread"); // 4.炒菜 Thread scrambleThread = new Thread(new CookingThread(cutThread,"炒菜"),"scrambleThread"); // 不受线程启动顺序的影响 scrambleThread.start(); washThread.start(); cutThread.start(); buyThread.start(); // main线程先执行完才可以开始:买菜 System.out.println("开始准备……"); } public static class CookingThread implements Runnable{ private final Thread thread; private final String job; public CookingThread(Thread thread, String job){ this.thread = thread; this.job = job; } @Override public void run() { String name = Thread.currentThread().getName()+":"; try { thread.join(); System.out.println(name + job + "开始"); Thread.sleep(1000); System.out.println(name + job + "结束"); Thread.sleep(1000); // 偷懒下 } catch (InterruptedException e) { e.printStackTrace(); } } } }
実行結果: main > buyThread > washThread >cutThread > scrambleThread > End
Start prepare 。 .. 料理の終了
setPriority(int) メソッド: スレッドの優先順位を設定します。
scrambleThread: 炒め物の開始
scrambleThread: 炒め物の終了
スレッドの優先度
現在のスレッドの優先度を設定します。スレッドの優先順位が高くなるほど、スレッドは実行回数が増えるほど、Java スレッドの優先順位は整数で表されます。優先順位の範囲は 1 ~ 10 で、デフォルトは 5 です。
getPriority メソッド: スレッドの優先度を取得します。
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("线程1"); }); thread.setPriority(10); Thread thread1 = new Thread(() -> { System.out.println("线程2"); }); thread1.setPriority(1); thread.start(); thread1.start(); System.out.println("线程默认的优先级为=" + Thread.currentThread().getPriority()); }
スレッド割り込み
interrupt() メソッドを使用してスレッド割り込みフラグ = true を設定し、スレッドが「ブロック」されたときに割り込みシグナルがスローされるようにします。スレッドがブロックされている、ウェイクアップを待っている、またはタイムアウト待機状態 (Object.wait、Thread.join、および Thread.sleep) にある場合、スレッドは割り込み例外 (InterruptedException) を受け取り、状態を早期に終了します。一方、スレッドが「RUNNABLE」状態にある場合、割り込みフラグは効果がありません。
ケース 1: スレッドの中断は有効です
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("线程1"); try { // 闹钟1分钟后响 Thread.sleep(60000); System.out.println("闹钟响了"); } catch (InterruptedException e) { // 提前退出超时等待状态 System.out.println("发生异常,提前醒了,闹钟没响手动关了"); } System.out.println("继续执行该线程的后续程序……"); }); thread.setPriority(1); thread.start(); thread.interrupt(); System.out.println("main线程将thread 终端状态设置为 "+thread.isInterrupted()); }
実行結果:
メイン スレッドはスレッドの終了ステータスを true に設定しますスレッド 1
例外が発生し、早めに目覚め、アラームが鳴らなかったので手動でオフにしました。スレッドの後続プログラムの実行を続行します... スレッドはステータスを RUNNABLE として出力し続けます。
以上がJava スレッドで一般的に使用される操作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

javadevelopmentisnotentirelylylypratform-IndopentDuetoseveralfactors.1)jvmvariationsaffectperformanceandbehavioracrossdifferentos.2)nativeLibrariesviajniintroducePlatform-specificissues.3)giaiasystemsdifferbeTioneplateplatifflics.4)

Javaコードは、さまざまなプラットフォームで実行するときにパフォーマンスの違いがあります。 1)JVMの実装と最適化戦略は、OracleJDKやOpenJDKなどとは異なります。 2)メモリ管理やスレッドスケジューリングなどのオペレーティングシステムの特性もパフォーマンスに影響します。 3)適切なJVMを選択し、JVMパラメーターとコード最適化を調整することにより、パフォーマンスを改善できます。

java'splatformindepentedencehaslimitationsincludingporformanceoverhead、versioncompatibulisisues、changleSwithnativeLibraryIntegration、プラットフォーム固有の機能、およびjvminStallation/maintenation。

PlatformEndependEncealLowsProgramStorunonAnyPlatformWithOdification、whilecross-platformdevelopmentReadreessomeplatform-specificAdjustments.platformindependence、explifiedByjava、unableSiversAlexecutionButMayCompromperformance

jitcompalilationinjavaenhancesperformance whelemaintaining formindepence.1)itdynamicallyTrantesiNTODENATIVEMACHINECODEATRUNTIME、最適化されたコードを最適化すること、

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









