一、Callable
首先这种方法可以获取线程的返回值。其他两种方法的run()方法的返回值是void
public class ThreadTest(){
public static void main(String[] args){
//1.创建一个未来任务类对象
//2.必须给Callable接口实现类对象
FutureTask futuretask=new FutureTask(
new Callable(){
@override
public Object call() throw Exception{//call方法相当于run方法
System.out.println("线程开始");
Thread.sleep(1000*10);
System.out.println("线程结束");
int a=10;
int b=20;
return a+b;//自动装箱
}
}
);
//创建线程对象
Thread thread=new Thread(futuretask);
//启动线程
thread.start();
//获取线程的返回值
Object object=futuretask.get();
}
}
这个方法有个问题:
会阻塞主线程,因为get方法需要时间
二、wait()和notify()
wait和notify都是Object类的方法
Object o=new Object
o.wait();//活动在o对象上的线程进行无限期的等待
o.notify();唤醒等待的线程