1、实现Runnable接口
public class RunnableImpl implements Runnable {
private String name;
public RunnableImpl(String name){
this.name=name;
}
@Override
public void run() {
for (int i=0;i<100000;i++){
System.out.println(this.name+":"+i);
}
}
public static void main(String[] args) {
Runnable runnable1=new RunnableImpl("胡歌");
Runnable runnable2=new RunnableImpl("吴京");
new Thread(runnable1).start();
new Thread(runnable2).start();
}
}
2、继承Thread类
public class ThreadExtend extends Thread {
public ThreadExtend(String name){
super(name);
}
@Override
public void run() {
for (int i=0;i<100;i++){
System.out.println(this.getName()+":"+i);
}
}
public static void main(String args[]){
new ThreadExtend("屈原").start();
new ThreadExtend("李白").start();
}
}
备注:通过上述的运行结果可以看出,结果是不确定的,这是因为每个线程都会公平的抢占CPU资源来进行运行,没有先后顺序。
3、实现Runnable比继承Thread所具有的优势
(1)、适合于多个相同的程序逻辑去处理同一个资源。
(2)、可以避免java当中单继承的限制。
(3)、增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。