スレッド・Runnable |
スレッド(Thread)と同じであるような記事がありますが、違いがあります。 public interface Runnable と定義されています。 スレッド extens Thread で継承します。 Runnable implements Runnable で実装します。 public interface Runnable なのでThreadのようにクラスではありません。 サンプルとしてRunnableSimpleを作ってみます。 public class RunnableSimple implements Runnable{ //スレッドを識別するためにnameフィールドを設定する private String myName; //スレッド名を設定 コンストラクター public RunnableSimple(String name){ myName = name; } //スレッドの実処理 public void run(){ for(int i= 0; i <= 50; i++){ Log.d(myName, "count = " + i); } } }Threadと違うのは、 extends ではなく implements をつかうこと runは、 public abstract void run () で定義されています。 @Overrideは使いません。 次にRunnableSimpleの実装です。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //スレッドを生成 Thread t1 = new Thread (new RunnableSimple("Thread_1")); Thread t2 = new Thread (new RunnableSimple("Thread_2")); Thread t3 = new Thread (new RunnableSimple("Thread_3")); t1.start(); t2.start(); t3.start(); Log.d("MainActivity", "MainActivity is finished."); } }Threadとなんとなく似ています。しかし、実行結果が違います。
synchronizedで修飾したように他のスレッドに邪魔をされることなく50までカウントアップされます。 |