网站代理怎么做/企业门户网站
1、线程的生命周期?
java线程的生命周期
新建、就绪、运行、阻塞、销毁
- 新建New:new创建一个线程,操作系统并没有分配资源
- 就绪Runable:调用start,线程变为就绪状态,等待CPU调度
- 运行Running:获取cpu资源,进入运行状态
- 阻塞Blocked:1)等待阻塞 2)同步阻塞 3)其他阻塞
- 死亡Dead:线程执行完毕后
start、join、wait、sleep、synchronized、notify、notifyAll、volatile、yield
- start:start是将新建的线程变为就绪状态
- join:调用join方法后,该线程会执行到死亡,才执行其他线程
- synchronized:同步代码块,解决多线程访问同一地址数据的共享数据时候出现的安全性问题
- wait:一般和synchronized、notify或notifyAll连用,用于线程通信,使用wait后线程进入阻塞状态,需要使用notify唤醒
- notify:唤醒阻塞的线程
- notifyAll:唤醒阻塞的线程
- sleep:让当前运行线程暂停运行,进入阻塞,当时睡眠时间到达后继续执行
- volatile:线程对变量进行操作,每个线程会先从内存拷贝变量到CPU缓存中,针对多CPU,每个线程可能在不同的CPU上处理,volatile确保变量是从内存中最新的数据而不是缓存数据
- yield:线程调用了yiled()之后回退到可运行状态,将抢占资源的机会让给其他相同优先级的线程
3、线程创建方式?
创建线程得方式:继承Thread类、实现Runnable接口、通过线程池ThreadPoolExecutor类
ThreadPoolExecutor参数介绍:
1、corePoolSize:核心线程数* 核心线程会一直存活,及时没有任务需要执行* 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理* 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭2、queueCapacity:任务队列容量(阻塞队列)* 当核心线程数达到最大时,新任务会放在队列中排队等待执行3、maxPoolSize:最大线程数* 当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务* 当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常4、 keepAliveTime:线程空闲时间* 当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize* 如果allowCoreThreadTimeout=true,则会直到线程数量=05、allowCoreThreadTimeout:允许核心线程超时6、rejectedExecutionHandler:任务拒绝处理器* 两种情况会拒绝处理任务:- 当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务- 当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。如果在调用shutdown()和线程池真正shutdown之间提交任务,会拒绝新任务* 线程池会调用rejectedExecutionHandler来处理这个任务。如果没有设置默认是AbortPolicy,会抛出异常* ThreadPoolExecutor类有几个内部实现类来处理这类情况:- AbortPolicy 丢弃任务,抛运行时异常- CallerRunsPolicy 执行任务- DiscardPolicy 忽视,什么都不会发生- DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务* 实现RejectedExecutionHandler接口,可自定义处理器