创建线程的两种方法:
继承thread类:
1>定义类继承Thread。
2>复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。
3>调用线程的start方法,该方法两个作用:启动线程,调用run方法。
class ThreadTest extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
}
该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。
也就是说Thread类中的run方法,用于存储线程要运行的代码
2.实现runnable接口
1>定义类实现Runnable接口
2>覆盖Runnable接口中的run方法,将线程要运行的代码存放在该run方法中。
3>通过Thread类建立线程对象。
class Ticket implements Runnable//extends Thread
{
private int tick = 100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
}
}
}
或者new Thread(new Runnable( run(){} )).start(); //将其作为参数传递给Thread类
实现方式好处:避免了单继承的局限性。
在定义线程时,建议使用实现方式。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。