8线程的并发和并行。
9线程的基本操作。
1)sleep()方法是将线程休眠,让cpu去执行其他线程,当线程休眠结束cpu分配资源继续执行该线程。
2)interrupt()方式将在运行的线程中断。当线程在阻塞状态调用该方法,则线程立刻退出阻塞状态,抛出intereuptedExceprion异常,线程退出。当线程是在运行状态调用该方法,则线程会将中断标记设置为true,则线程在合适的时候退出。
3)join()是将线程合并。
4)yield()是将现在执行的线程放弃当前的执行,让出CPU的执行权限,使得CPU执行其他线程。
5)deamon属性设置为true,则为守护线程,若为false设置为用户线程
10 Exceutors创建4种类型的线程池
单线程化的线程池
ExecutorService pool=Executors.newSingleThreadExecutor();
固定线程的线程池
ExecutorService pool=Executors.newFixedThreadPool(3);
可缓存的线程池
ExecutorService pool=Executors.newCachedThreadPool();
可调度的线程池
ScheduledExecutorService pool=Executors.newScheduledThreadPool(2);
11 ReentrantLock可重入锁。ReentrantLock可用于代替synchronized。ReetrantLocak更加安全
12线程标准创建方式:Executors工场创建线程,但是实际上是通过ThreadPoolExceutor去构建线程池的。
对于ThreadPoolExecutor构造器来说有6个参数。
- CorePoolSize 核心线程数。
- maximumPoolSize zuida 线程数的上限。
- keepAliveTime 线程最大空闲时间。
- BlockingQueue<Runnable> 任务排队队列
- ThreadFactory 新线程产生的方法。
- RejectedExecutionHandler 拒接策略
13像线程池提交任务的俩种方式。
第一种方式
1 execute(Runnable runnable)
第二种方式
2 <T> Future<T> submit(Callable<T> task)
3 <T> Future<T> submit(Runnable task,T result)
4 Future<?> submit(Runnable task)
线程池任务提交方式的区别:
- 这俩个方法接受的参数不一样。Execute()只可以接受Runnable的参数,submit可以接受Callable,Runnable。
- 对submit接受参数之后会有返回值,对于execute()没有返回值。
- Submit方便Exeption处理。