1.任务只需实现Runner接口并编写run()方法,就可以执行任务.每个任务需要着到线程(Thread)上.
注意:线程执行基本是无序的,若要控制顺序,需要使用同步控制
2.但是Exector可以为我们管理Thread对象,Exector在客户端和任务执行之间提供了一个间接层.
Executors.newCachedThreadPool(),Executors.newFixedThreadPool(5)
3.可以从任务中返回值P658
4.线程休眠:TimeUnit.MILLISECONDS.sleep(1000)
5.线程优先级P660.
6.线程让步yield,不可依赖,常被误用.
7.后台(daemon)线程P662
(1) Thread daemon = new Thread(new SimpleDaemons());
daemon.setDaemon(true); // Must call before start()
daemon.start();
(2)可以通过isDaemon()判断是否为后台线程
*通过后台纯种创建的线程也是后台线程P663
(3) 当最后一个非后台线程终止时,所有后台线程会"突然"全部终止,所有未执行完的部分都不会执行,包括finally模块.
8.异常捕获
(1)无法直接捕获从线程中抛出的异常
(2)若要捕获线程中的异常,必须在创建线程时设置异常处理器(ExceptionHandler)P673-674