21.2.1 定义任务
new Runnable(){
@Override
public void run(){}
}
21.2.2 Thread类
将Runnable对象转变为工作任务的传统方式是把它提交给一个 Thread 构造器。
new Thread(new Runnable(){}).start();
21.2.3 使用Executor
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(new Runnable的实现类)
注意
exec.shutdown();
第一次遇到线程池的概念:
ExecutorService exec = Executors.newFixedThreadPool(5);
21.2.4 从任务中产生返回值
实现Callable 接口。重写的方法是 call() . 使用的泛型,返回值类型是泛型指定的类型。
21.2.5 休眠
使用的是TimeUnit.MILLISECONDS.sleep()
对sleep的调用可以抛出InterruptException 异常。因为异常不能跨线程传播回main(),所以必须在本地处理所有在任务内部产生的异常。
这里没有讲 Thread.sleep() ??
21.2.7 让步
Thread.yield() 不能依赖yield() , 这是系统控制的,不是绝对的让步。
21.2.8 后台线程
Thread dm = new Thread(new Runnable实现类);
dm.setDaemon(true);
dm.start();
必须在线程启动前调用setDaemon()方法,才能把它设置为后台线程。