Thread:继承Thread类,可以直接使用this关键字,不能继承其他类;
runnable:可以继承其他类,多个线程共享一个target,必须使用Thread.currentThread().getName()获取当前线程名称,推荐使用这种;
callable:跟runnable差不多,不过他可以有返回值跟抛出异常;
继承Thread类
package com.jspjs.test.thread;
public class CreateByThread extends Thread {
private int i;
public void run(){
for(;i<10;i++){
System.out.println(getName()+"|"+i);
}
}
/**
* @param args
*/
public static void main(String[] args) {
for(int i =0;i<1000;i++){
System.out.println(i);
if(i==10){
new CreateByThread().start();
new CreateByThread().start();
}
}
}
}
实现Runnable接口
package com.jspjs.test.thread;
public class CreateByRunnable implements Runnable {
private int i;
@Override
public void run() {
for(;i<10;i++){
System.out.println(Thread.currentThread().getName()+"|"+i);
}
}
/**
* @param args
*/
public static void main(String[] args) {
CreateByRunnable runnable=new CreateByRunnable();
new Thread(runnable,"子线程1").start();
new Thread(runnable,"子线程2").start();
}
}
实现Callable接口
package com.jspjs.test.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class CreateByCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
Integer i=0;
for(;i<10;i++){
System.out.println(Thread.currentThread().getName()+"|"+i);
}
return i;
}
/**
* @param args
*/
public static void main(String[] args) {
CreateByCallable callable=new CreateByCallable();
FutureTask<Integer> task=new FutureTask<Integer>(callable);
new Thread(task,"线程1").start();
try {
System.out.println("子线程的返回值:"+task.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}