昨天又看了毕老师的教程,看到了多线程。本来我们的类要想实现多线程,就得要继承线程类。但这样有很多的不便:1、我们的类不能再继承其他的类。有时这种继承是很有必要的,对线程类的继承浪费了仅有的一个宝贵名额。2、共享变量不好传递(卖票的例子)。可以用static解决,但static变量的生命周期太长,不好。
于是神奇的第二种实现多线程的方式出现了!!---===实现Runnable接口。
我们实现Runnable接口(同时Thread有一个接收Runnable 的构造方法),这样就很好地解决了java不能多继承的问题,把我们的类对象作为公共变量传递给多个线程,这样第二个问题也很好地解决了。
就这样完美地解决了问题,喜出望外的同时,我不禁要想,为什么会这么神奇呢?这后面隐含了什么原理呢?Thread类就像一个工厂,他可以制造家具,我们如果想制造家具,有两种方法:
一是自己也学着造一个同样的工厂,在自己的厂里面制造家具。这就相当于把我们的类继承Thread线程,创建多线程。
二是,我们自己不用开厂,让Thread厂给我们代加工。工厂贴出告示说可以加工一种叫Runnable的木材,然后我们就拿着自己的Runnable木材到工厂,让工厂给代加工,制造家具。我将这种方式我称为代加工模式。这样是不是很爽?自己想要的家具别人帮忙制造了。自己可以自由选择开别的厂(继承其他的类)。代加工能实现的前提条件是:Thread工厂可以加工Runnable木材,而你自己也有Runnable木材。 |