1.在同步代码块中,用哪个对象锁就用该对象调用wait()方法
2.为什么wait()和notify()这些方法要定义在Object这个类中?
锁对象可以是任意对象,那么任意对象对应的类都是Object的子类,所以将方法定义在Object这个类中就会让任意对象对其进行调用
3.sleep()方法和wait()方法的区别
a.sleep()方法在同步代码块或者同步函数中,不释放锁
wait()方法在同步代码块或者同步函数中,释放锁
b.sleep()方法必须传入参数,参数就是时间,时间到了,自动醒来
wait()方法可以传入参数,也可以不传入--- 如果传入参数,用法和sleep()方法类似,时间到停止等待(通常用无参的)
4.线程的五种状态
5.线程池的概述
6.第三种创建线程的方式--callable(暂时了解)
public class Demo_08 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//创建线程池对象
ExecutorService pool = Executors.newFixedThreadPool(2);
//可以执行Runnable对象或者Callable对象代表的线程
Future<Integer> f1 = pool.submit(new MyCallable(100));
Future<Integer> f2 = pool.submit(new MyCallable(50));
Integer i1 = f1.get();
Integer i2 = f2.get();
System.out.println(i1);
System.out.println(i2);
//关闭线程池
pool.shutdown();
}
}
class MyCallable implements Callable<Integer>{
private int number;
public MyCallable(int number) {
super();
this.number = number;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i = 1;i<=number;i++) {
sum+=i;
}
return sum;
}
}