标签:创建线程的两种方式
创建线程有2种方法
1继承Thread类, 该子类应重写 Thread类的 run 方法
2实现Runnable接口,将类声明为 Thread 的子类。有单继承的局限性不常用
Thread类概述
该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例
创建线程的步骤:
1 定义一个类继承Thread。
2 重写run方法。
3 创建子类对象,就是创建线程对象。
4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。
实现Runnable接口避免了单继承的局限性,所以继承Thread类的方式在这里不再赘述
Runnable接口概述
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个run 的无参数方法
创建线程的步骤
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。
3、创建Thread类的对象,将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
4、调用Thread类的start方法开启线程。
代码演示:
class Demo implements Runnable
{
privateString name;
Demo(Stringname)
{
this.name= name;
}
//覆盖了接口Runnable中的run方法。
publicvoid run()
{
for(inti=1; i<=20; i++)
{ System.out.println("name="+name+"..."+Thread.currentThread().getName()+"..."+i);
}
}
}
class ThreadDemo2
{
publicstatic void main(String[] args)
{
//创建Runnable子类的对象。注意它并不是线程对象。
Demo d= new Demo("Demo");
//创建Thread类的对象,将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
Threadt1 = new Thread(d);
Threadt2 = new Thread(d);
//将线程启动。
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName()+"----->");
System.out.println("HelloWorld!");
}
}
实现Runnable的好处(相对于继承Thread类)
1. 避免了单继承的局限性
2. 线程分为两部分,一部分线程对象,一部分线程任务.更加符合面向对象的思想
线程对象调用 run方法和调用start方法区别?
线程对象调用run方法不开启线程。仅是对象调用方法。线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行。
标签:创建线程的两种方式
原文地址:http://wangfoye.blog.51cto.com/12003317/1855674