java 创建线程的两种不同方式

创建方式及区别。应该是很早以前的知识点了,当时没有记录下来,搞得我一时想不起来区别在哪里…现在来补以前欠的债。

参考:http://blog.csdn.net/qq_20302155/article/details/51564985

 

一、创建方式

看别人的博客,都是用买票的场景模拟的,我也模仿一下。

(1)继承Thread类,重写run()方法

TestThread.java

输出结果:

每条线程都卖10张票,一共卖出30张(各干各的)。

(2)继承Thread类,重写run()方法

TestRunnable.java

输出结果:

每条线程一起卖十张票,一共卖出10张(一起干)。

二、区别

如果继承Thread类,相当于拿出三件事情,即三个卖票10张的任务,分给三个条线程。他们各做各的事,各卖各的票,各完成各的任务。

因为MyThread继承Thread类,所以在new MyThread的时候,在创建三个对象的同时也创建了三个线程。

如果实现Runnable接口,相当于是拿出一个卖票10张的任务给三条线程共同完成。new NewThread相当于创建一个任务,然后实例化三个Thread,他们一起执行NewThread这个任务。

我们刚接触多线程的时候,可能会难以区分继承Thread类、实现Runnable接口。写完这个例子后,我们会发现这完全是不同的实现方式,一个是让多条线程分别完成自己的任务,另一个是使用多条线程共同完成一个任务。

实际上,就算使用继承Thread类的方式来创建多线程,也可以让他们同时完成同一个任务,只是比较麻烦而已。一般情况下,我们都用实现Runnable接口的方式来实现,简洁明了。

在大多数情况下,如果只想重写run()方法,不需要重写其他Thread方法,那么应该使用 Runnable接口的方式。除非作者打算修改、增强类的基本行为,否则不应为该类(Thread)创建子类。

三、总结

记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注