Javaスレッドの2つの実装形式

2952 ワード

一、スレッドを作成する第一の方法:Threadクラスを継承する
class Demo extends Thread{
    @Override
    public void run() {
        super.run();
        for(int i=0;i<20;i++)
            System.out.println(Thread.currentThread()+"...."+i);
    }
}

public class ThreadDemo1 {
    public static void main(String[] args){
        Demo d1 = new Demo();
        Demo d2 = new Demo();
        d1.start();
        d2.start();
    }
}

二、スレッドを作成する第二の方法:Runnableインタフェースを実現する
class Demo2 implements Runnable{
    public void run() {
        for(int i=0;i<20;i++)
            System.out.println(Thread.currentThread()+"..."+i);
    }
}

public class ThreadDemo2 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Demo2());
        Thread t2 = new Thread(new Demo2());
        t1.start();
        t2.start();
        
    }
}

Runnableの出現はスレッドのタスクをオブジェクトのカプセル化しただけである.
Runnableインタフェースのメリット:
1、スレッドのタスクをスレッドのサブクラスから分離し、個別のカプセル化を行う.対象に向かう考えに従ってタスクを対象にカプセル化する.
2、Javaシングル継承の限界を回避
したがって、第2の方法では、スレッドを作成するのが一般的です.