");}}}これでThreadクラスを継承したThreadBasicクラスができました。Threadクラスを使用するときは、必ずrun()メソッドをオーバーライドする必要があります。このrun()メソッドはJavaでいうところmainメソッドのようなもので、スレッド開始時に呼び出されるエントリーポイントです。ここにThreadで行いたい処理を書きましょう。今回は0-50の間でカウントアップを行う処理行なっています。//スレッドを呼び出すにはThread派生クラスここではThreadBasicをインスタンス化してstartメソッドを呼び出します。{super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//スレッドを生成する//スレッドを呼び出すにはThread派生クラスここではThreadBasicをインスタンス化してstartメソッドを呼び出します。ThreadBasic("t3");//スレッドを開始t1.start();t2.start();t3.start();}}それでは実際にスレッドを使って処理を行うとどのようになるのかみてみましょう。MainActivityではThreadクラスをインスタンス化し、3つのスレッドを作りました。それぞれ、start()メソッドを実行して並行して実行します。順番が交互になって処理結果が表示されています。これで各スレッドで処理が並列的に実行されたことを確認できましたね。Runnableインターフェース同様にRunnableインタフェースを実装した場合はこのようになります。//Runnableインターフェイスはrunメソッドだけを定義したシンプルなインターフェイス。com.example.runnablebasic;//Runnableインターフェイスはrunメソッドだけを定義したシンプルなインターフェイス。i);}}}生成&実行処理はこちらです。RunnableBasic("t3"));t1.start();t2.start();t3.start();}}Threadクラスとの違いはほとんどありません。別々の処理を並行的に実施できるとはいえ、同一のメモリ上で処理されるので、共有のデータに対して同時に処理を行った場合、不整合が発生するケースがあります。run(){_counter.countUp();}}}これは50万個のスレッドを並行してカウントアップするプログラムです。このプログラムを実行すると正しく動作しない可能性があります。理由としては以下のようなケースが起こり得るからです。BadCountクラスのcountUp()メソッドの処理で「変数の現在地を取得→値を加算→演算結果の再代入」という手順を行なっています。処理の途中で他のスレッドの割り込みが入ると結果が正しく反映されない可能性があります。上述した不整合を防ぐために、synchronized修飾子を利用します。countUp(){count++;}synchronized修飾子が指定されると、そのメソッドが複数のスレッドから同時に呼び出されることがなくなります。同時に呼び出されたとしても、先に呼び出した方の処理が優先され、先に呼び出された方で処理が完了するまで、次のスレッドで呼び出されず待ちの状態となります。このように特定の処理を占有することロックを獲得すると呼んだりもします。ロックを獲得して処理を行うことを同期処理と呼びます。おわりに今回はJavaのスレッド処理に関してまとめてみました。スレッドはまだ奥が深そうな分野なので、引き続き学習してブログでも発信していきたいと思っています。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスサイト上に表示された文字を入力してください。最近、雨が多いですね。MPAndroidChartライブラリを使い移動平均線を描画してみる。引き続きKotlinの基本文法で、今回はクラスのネストについてです。私たちは無料アプリもリリースしています、ぜひご覧ください。下記のアイコンから無料でダウンロードできます。