多线程的优势
1.线程间可以共享内存,文件句柄,和其他每个进程应有的状态。创建线程开销小。
线程的创建和启动过程。
①继承Thread类创建线程类
②实现runnable接口
③使用Callable和future创建线程
这个callable比Runnable接口的优势是,call()方法有返回值。且可以声明抛出异常。使用案例如下:
public class ThirdThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int i=0;
for (;i<100;i++){
System.out.println(Thread.currentThread().getName()+i);
}
return i;
}
public static void main(String[]args){
ThirdThread thirdThread = new ThirdThread();
FutureTask task = new FutureTask(thirdThread) ;
for (int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+i);
if (i==20){
new Thread(task,"有返回值的线程").start();
}
}
try {
System.out.println("子线程的返回值:"+task.get());
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (ExecutionException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
1.继承Thread,则可以直接使用this访问当前线程。但限定的比较死,不能再继承其它类了。
2.实现Runnable callable接口,可以共享同一个目标对象,访问当前线程,必须使用Thread.currentThread()方法。
线程的生命周期:
new(新建) Runnable(就绪) running(运行) Blocked(阻塞) Dead(死亡)
状态转换图: