方式一:Thread创建
package test;
public class ThreadTest1 {
public static class NewThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("AAAAA");
}
}
public static void main(String[] args) {
//写法一
// NewThread t1 = new NewThread();
// t1.start();
//写法二
Thread t1 = new Thread()
{
public void run() {
System.out.println("BBBBB");
};
};
t1.start();
}
}
方式二:Runnable借口创建
package test;
public class ThreadTest {
static class RunnableThread implements Runnable{
@Override
public void run() {
System.out.print("aaaa \n");
}
}
interface B{
}
static class ThreadTestInner extends Thread implements B{
@Override
public void run() {
System.out.println("CCCC");
}
}
public static void main(String[] args) throws Exception{
Thread thread = new Thread(new RunnableThread());
thread.start();
}
}
两种创建线程方式的比较
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标(target)对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。