使用Runable接口和Thread类实现线程的异同

2019-03-04  本文已影响0人  FoxLayla

使用Runable接口和Thread类实现线程的异同

相同之处

不同之处

示例2:使用Thread类

public class MyThreadByThread extends Thread {
    private String name;

    public int count = 7;

    public MyThreadByThread(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println(this.name + " is running, count = " + count--);
            try {
                Thread.sleep((int) (Math.random() * 10));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class Main {

    public static void main(String[] args) {
        MyThreadByThread myThread4 = new MyThreadByThread("Thread_4");
        // 如果用同一个线程对象开启多个线程会报异常
        myThread4.start();
        myThread4.start();
    }
}
image
// 使用Thread类来开启多个线程的正确写法
public class Main {

    public static void main(String[] args) {
        MyThreadByThread myThread4 = new MyThreadByThread("Thread_4");
        MyThreadByThread myThread5 = new MyThreadByThread("Thread_5");
        MyThreadByThread myThread6 = new MyThreadByThread("Thread_6");
        myThread4.start();
        myThread5.start();
        myThread6.start();

    }
}
image

可以看到三个线程并没有共享资源,因为它们必须由不同线程对象开启。


参考

上一篇 下一篇

猜你喜欢

热点阅读