线程:
CPU调度和分配的基本单位,基本不用系统资源,只拥有一点在运行中必不可少的资源
创建线程的四种方式
1. 实现Runnable接口,重写run方法
具体做法:
class RunnableDemo implements Runnable{
public void run() {
for (int i = 0, j=10;i<j;i++){
System.out.println(i);
}
}
}
调用:
RunnableDemo runnableDemo = new RunnableDemo();
new Thread(runnableDemo).start();
2. 继承Thread类,重写run方法
具体做法:
class ThreadDemo extends Thread{
@Override
public void run() {
for (int i = 0, j=10;i<j;i++){
System.out.println(i);
}
}
}
调用:
new ThreadDemo().start();
3.实现callable接口,重写call方法
class CallableDemo implements Callable<Integer>{
public Integer call() {
int sum = 0;
for (int i = 0, j=10;i<j;i++){
System.out.println(i);
sum+=i ;
}
return sum;
}
}
调用:
CallableDemo callableDemo = new CallableDemo();
FutureTask<Integer> futureTask = new FutureTask<Integer>(callableDemo);
new Thread(futureTask).start();
System.out.println(futureTask.get());
说明:
FutureTask 继承于 RunnableFuture,RunnableFuture 继承于Runnable 所以可以创建线程(多态)
利用 futureTask.get()方式,获取返回值,但是线程并不会启用