创建线程和运行线程
首先看一下一个方法的执行都经过了什么
只有一个主线程的时候详细执行过程
结合idea看下两个线程同时执行发生的事情
1.创建线程方式一
//TODO 创建线程
Thread t = new Thread(){
public void run(){
//执行的任务
}
}
//TODO 运行需要执行的任务
t.start();
2.创建线程的方式二
线程创建和任务分开
//callable方法中的call方法可以抛出异常,且有返回值,若果需要知道新线程执行的结果一级抛出的异常,可以用这个
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
//TODO 需要执行的操作
return "";
}
};
Thread thread = new Thread(task,"T");
//runnable方法无返回值,不能抛异常
Runnable task = new Runnable() {
@Override
public void run() {
//TODO 需要执行的操作
}
};
Thread thread = new Thread(task,"T");
//看实际需求选取call或者run
3.创建线程的方式三
使用FutrueTsk,此方法相当于对Callable的扩展,使用get()可以获取任务执行返回的结果,get()方法为阻塞方法,会等待线程执行完内容返回结果get到结果才会继续执行,如果需要执行的任务抛出异常或者未返回内容结果,会使代码执行一直卡在get方法这里
FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
// TODO 需要执行的操作
return "";
}
});
Thread thread = new Thread(task,"T");
String s = task.get();