您的位置:首页 > 职场人生

黑马程序员_java创建线程的两种方式

2012-12-21 16:48 295 查看
------- android培训java培训、期待与您交流! ----------

创建线程的第一种方法:继承Thread类

通过卖票实例:

class Ticket extends Thread

{

private int tick=100;

public void run()

{

while(true)

{

if(tick>0)

{

System.out.println(Thread.currentThread().getName()+"sale:"+tick--);

}

}

}

}

class

{

public static void main(String[] args){

Ticket t1=new Ticket();

Ticket t2=new Ticket();

Ticket t3=new Ticket();

Ticket t4=new Ticket();

t1.start();

t2.start();

t3.start();

t4.start();

}

}

结果:卖了四百张票。

解决一:将变量tick改为静态的即可。但一般不定义静态变量,因为生命周期太长。

解决二:将main方法中改为:

Ticket t1=new Ticket();

t1.start();

t1.start();

t1.start();

t1.start();

四个窗口同时卖票,但线程状态出问题。已经运行的程序再开启没意义,

程序已经从创建状态到了运行状态。

该如何解决?

第二种创建线程的方法:实现Runnable接口

步骤:

1,定义类实现Runnable接口

2,覆盖Runnable接口中的run方法。

将线程要运行的代码存放在该run方法中。

3,通过Thread类建立线程对象。

4,将Runnable接口的子类对象作物实际参数传递给Thread类的构造函数。

为什么要将Runnable接口的子类对象传递给Thread的构造函数。

因为,要定义的run方法所属的对象是Runnable接口的子类对象。

所以要让线程去指定对象的run方法。就必须明确该run方法所属对象。

5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

class Ticket implements Runnable

{

private int tick=100;

public void run()

{

while(true)

{

if(tick>0)

{

System.out.println(Thread.currentThread().getName()+"sale:"+tick--);

}

}

}

}

class

{

public static void main(String[] args){

Ticket t=new Ticket();

Thread t1=new Thread(t);//创建了一个线程。

Thread t2=new Thread(t);//创建了一个线程。

Thread t3=new Thread(t);//创建了一个线程。

Thread t4=new Thread(t);//创建了一个线程。

t1.start();

t2.start();

t3.start();

t4.start();

}

}

实现方式和继承方式有什么区别呢?

继承Thread:线程代码存放在Thread子类run方法中。

实现Runnable,线程代码存放在接口的子类的run方法中。

实现方式的好处:避免了单继承的局限性。

在定义线程时,建议使用实现方式。

------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: