java线程模式

来源:互联网 发布:iphone备份短信到mac 编辑:程序博客网 时间:2024/06/03 07:08

今天学习了java的多线程,害怕自己的猪脑子,把今天所学的都忘了,赶紧写篇博客加深一下印象。

有两种创建线程的方法,一个是通过Thread类,一个是通过Runnable接口创建。

先说一下用Thread类怎么创建线程


       java通过Thread类将线程所必须的功能都封装起来,想要创建一个线程,只需要创建一个类继承Thread类,然后重写Thread类里的run()方法就可以了。

public class ThreadTest extends Thread{@Overridepublic void run() {super.run();System.out.println(this.getName());}public static void main(String[] args) {System.out.println(Thread.currentThread().getName());Thread thread1 = new ThreadTest();Thread thread2 = new ThreadTest();thread1.start();thread2.start();}}

       通过Thread类创建线程的代码如上:在上述代码中建立了thread1和thread2两个线程,start()方法是负责建立线程的。当调用start()方法时,系统会自动调用run方法,然后run方法中的this.getName()方法输出了当前线程的名字,由于在建立的线程时没有指定线程的名字,因此所输出的线程名是系统默认的,也就是Thread-n 的形式。上述代码执行后输出:

mainThread-0Thread-1

注意:任何一个java程序都必有一个主线程。一般这个主线程的名字为main。只有在程序中建立另外的线程,才能算是真正的多线程程序,也就是说,多线程程序必须拥有一个以上的线程。

看过上面代码你可能会考虑,如果我不想使用系统默认的线程名字,想用自己的给线程气的名字该怎么办呢?其实在Thread类中有很多的构造方法。有的构造方法可以设置线程名字。也可以通过setName()方法来设置线程名字。使用Thread类创建线程简单的说完了,下面在说一下另一种方法:

使用Runnable接口创建线程

       使用Runnable接口创建线程的过程分为两步

       1、将实现Runnable接口的类实例化。

       2、建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法,最后通过Thread类的start()方法建立线程。

看一下代码的简单实现:

public class ThreadTest implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {System.out.println(Thread.currentThread().getName());ThreadTest runnable1 = new ThreadTest();ThreadTest runnable2 = new ThreadTest();Thread thread1 = new Thread(runnable1,"ThreadTest1");Thread thread2 = new Thread(runnable2);thread2.setName("ThreadTest2");thread1.start();thread2.start();}}
在上述代码中我们创建了runnable1和runnable2两个对象,并且以参数的形式传入到Thread类的两个构造方法中,thread1通过构造方法来设置线程的名字,thread2通过setName()方法来设置线程的名字运行start()方法。和上面讲说的步骤一样。运行一下。运行的结果如下:

mainThreadTest1ThreadTest2

很完美所出现的结果和我们所预想的一样,看来没什么错误了。

其中Thread.currentThread();该方法是Thread类的静态方法,它总是返回当前正在执行的线程对象。

       好了java创建线程的两种方法已经实现完毕,可能你会很好奇为什么java会提供两种创建线程的办法呢?这两种有什么不一样呢?好吧给大家说一下我的理解:

       其实这两种方法在本质上说是一种方法,即都是通过Thread类来创建线程,并运行run方法。但是他们的大区别是一个是用继承,一个是使用接口实现。因为java不支持多继承所以当你继承了Thread时就不能继承其他类了,因此java提供了Runnable接口的方法来建立线程,这样线程类可以在有必要的时候继承和业务有关的类,而不是Thread类。


原创粉丝点击