java创建线程的两种方法区别

网友投稿 245 2023-05-06


java创建线程的两种方法区别

在java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。

下面通过两个例子来分析两者的区别:

1)继承Thread类

public class TestThread extends Thread {

int count = 3;

public ThLYoIAYestThread(String ThreadName) {

super(ThreadName);

}

@Override

public void run() {

for (int i = 0; i < 10; i++)

if (count > 0) {

System.out.println(Thread.currentThread().getName() + "--->" + count);

count--;

}

}

public static void main(String[] args) {

//new三个线程并启动

new TestThread("线程一").start();

new TestThread("线程二").start();

new TestThread("线程三").start();

}

}

输出结果:

线程一--->3

线程一--->2

线程一--->1

线程二--->3

线程二--->2

线程二--->1

线程三--->3

线程三--->2

线程三--->1

2)实现Runnable接口

同样跟继承Thread的代码:

public class TestThread implements Runnable {

int count = 3;

public TestThread() {

}

@Override

public void run() {

for (int i = 0; i < 10; i++)

if (count > 0) {hLYoIAY

System.out.println(Thread.currentThread().getName() + "--->" + count);

count--;

}

}

public static void main(String[] args) {

TestThread tr = new TestThread();

//new三个线程并启动同一个Runnable

new Thread(tr, "线程一").start();

new Thread(tr, "线程二").start();

new Thread(tr, "线程三").start();

}

}

输出结果:

线程一--->3

线程一--->2

线程一--->1

可以发现两种新建线程的方式最后的输出结果不一样,是因为在继承Thread类中,同时创建了三个线程,每个线程都执行一个任务,相当于三个线程分别各自进行三次循环打印log;而在第二种实现Runnable接口中是创建三个Thread共同去执行tr这个Runnable,相当于三个Thread共同去执行这一个循环,使得最后count只循环了一次,剩余线程二和线程三都因为使用同一个count导致未能打印出来。

结论:

1)两种创建线程的实现方式不一样,一个通过继承一个通过实现接口,在Java中如果已经继承了其他的父类,那么只能实现接口来创建线程。

2)通过上面的例子可以看到继承Thread,每个线程都独立拥有一个对象,而实现Runnable对象,多个线程共享一个Runnable实例。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mock工具台作用(mock工作原理)
下一篇:详解Angular之constructor和ngOnInit差异及适用场景
相关文章

 发表评论

暂时没有评论,来抢沙发吧~