Java多线程2—线程的创建
在java语言出现之前,多线程是通过操做硬件等方法实现的,尽管这是一种有用的方法,但编出的程序很难移植,所以程序员往往为此付出不小的代价。Java是第一个从语言级实现多线程的方法。由于java实现了多线程,使得利用java编写多线程的程序也比较简单,因此这也成了java语言相比于其他语言的一个优势。另外java是运行在虚拟机上的,可移植性强,这个特点和简单的多线程编写配合,使的java的优势更明显。扯的有点远了,回来,下面介绍线程的创建。
在创建我们自己写的线程的时候,java就已经先创建了一个线程,就是我们运行主函数main的线程。有时候我们可能会需要得到当前正在运行的线程,这里我们就可以用Thread类中的静态方法currentThread(),这个函数返回的是一个Thread类的实例的引用,我们可以调用getName()方法获得当前的线程的名字(具体的方法请读者自己查看java的帮助文档)。下面我们举一个例子:
public class aaa
{
public static void main(String[] args)
{
System.out.println(Thread.currentThread().getName());
}
}//main
下面我们介绍java中怎么创建多线程,java提供了两种创建多线程的方法,如下:
(1)从Thread类继承;
(2)实现Runnable接口。
对于这两种创建线程的方法,都必须实现一个run()方法,因为在我们创建线程后,调用start()启动线程之后,调用的是run()方法。
这里多说一句,在java中有许多的类跟接口可以实现同样的功能,有些人就感觉这个多此一举。但是认真想想,java为了安全的考虑只支持单继承,但是我们的实际开发中,课程需要同时继承两个类,但是java又是不允许。这里接口就发挥作用了,我们可以继承一个类,同时实现一个或多个接口(对于接口实现的个数java中没有限制)。
下面介绍第一个创建线程的方法,我们还是以例子的形式给出:
public class aaa
{
public static void main(String[] args)
{
System.out.println(Thread.currentThread().getName());
MyThread mt = new MyThread();//创建MyThread类的一个实例,并把它赋给mt
mt.start();//启动线程
}
}
class MyThread extends Thread
{
public void run()
{
System.out.println(Thread.currentThread().getName());
}
}
上面的例子显示了创建线程的第一方法,多说一句,有时候我们需要在启动线程的时候,去做一些别的工作,这些工作不是我们在创建对象的时候做的,我们可以重写Thread类的start()方法,就像下面一样
public void start(){
自己想要做的工作
Super.start();
}
下面我们介绍第二种创建线程的方法,还是以例子的形式给出:
public class aaa
{
public static void main(String[] args)
{
System.out.println(Thread.currentThread().getName());
MyThread mt = new MyThread();//创建MyThread类的一个实例,并把它赋给mt
Thread t = new Thread(mt);//创建一个Thread类的对象,并且将我们实现了run()方法的MyThread类的对象的实例mt作为参数传入
t.start();//启动线程
}
}
class MyThread implements Runnable
{
public void run()
{System.out.println(Thread.currentThread().getName());}
}//main
Thread-0
在我实现runnable接口创建线程的时候,我们必须将我们自己写的类的实例作为参数传给一个Thread类的对象,然后在调用该对象的start()方法。
这里简单的介绍了一下,希望对大家有帮助,如果有错或者不妥当的地方希望指出。
------解决方案--------------------这个是散分吗??那我来接分了!!
------解决方案--------------------LZ是个好童鞋,多总结总结也会有进步的
------解决方案--------------------想接点分。。。
------解决方案--------------------学习了 接分