线程是什么 Java中的线程( 二 )


3. WAITING
不设置timeout的Object.wati()、Thread.join()等方法会让线程进入无限等待,需要等待其他线程显式的唤醒 。
4. TIMED_WAITING
Thead.sleep()或设置了timeout的Object.wati()、Thread.join()等方法让线程进入限期等待 。
5. BLOCKED
阻塞状态,线程在等待进入同步区域 。
6. TERMINATED
线程执行结束,终止状态 。
从上面的状态图可以看出,线程从新建、执行到结束是单向的,期间可能会经历等待和阻塞状态,线程执行结束进入终止状态后将不能再重复使用 。任何时候一个CPU核只能执行一个线程,也就是说同时并行运行的线程数与CPU核数相等 。在操作系统内核层面,线程只有分配了CPU的执行时间片,才算处于RUNNING状态 。而当有大于CPU核数的线程需要执行,没有分配到CPU执行时间片的线程则处于READY状态 。RUNNING和READY都是线程在内核的状态,同时映射到java的RUNNABLE状态 。RUNNABLE正如其名,表示可运行的状态,并非正在运行的状态 。
线程池
java编程不可避免的要使用线程,而使用线程更常见的方式是使用线程池 。说起池这个东西,我们应该比较熟悉,例如:连接池 。其实池就是一个容器,里面有一堆预先创建好的对象,我们就称其为对象池,而当这个对象具体为线程,那就是线程池了 。前面讲线程状态说过,线程执行从run()方法退出就会进入终止状态,那么这个线程就消亡了,不能再复用 。线程池的概念就是要复用线程,避免创建开销,那么如何复用呢,其实就是要让池中的线程不用从run()方法中退出 。所以为了复用线程,池的实现会与一个阻塞队列结合,空闲时线程阻塞在队列上等待任务到来,任务执行结束后再重新阻塞,永远不会退出 。
jdk1.5引入了java.util.concurrent并发包后,我们可以很方便的通过ThreadPoolExecutor来创建线程池
public ThreadPoolExecutor
(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: