内容简介:在程序开发中, 一定遇到并发编程的场景, 虽然我们大部分时间并不直接使用Thread, 但是Thread是多线程的基础, 面试中也会总是被问到与线程有关的问题; 那么线程都有哪些知识呢? 最近在研究线程的源码的时候也总结了关于线程一些基本知识;线程是轻量级的进程, 是操作系统调度任务到CPU的最小单元;1、多线程编程能够最大程度的利用多核设备上面的CPU资源, 保证任务处理的足够快, 及时响应客户端的额请求
在程序开发中, 一定遇到并发编程的场景, 虽然我们大部分时间并不直接使用Thread, 但是Thread是多线程的基础, 面试中也会总是被问到与线程有关的问题; 那么线程都有哪些知识呢? 最近在研究线程的源码的时候也总结了关于线程一些基本知识;
线程是什么
线程是轻量级的进程, 是操作系统调度任务到CPU的最小单元;
多线程编程的优点
1、多线程编程能够最大程度的利用多核设备上面的CPU资源, 保证任务处理的足够快, 及时响应客户端的额请求
2、线程的创建的代价比创建进程的代价小很多, 同时多线程的上下文切换也更快; 《操作系统概念 第六版》 在Solaris 2上面, 创建进程比创建线程慢30倍, 而进程的上下文切换比线程的上下文切换慢5倍;
Java中线程的状态有哪些
查看java.lang.Thread的源码有如下代码:
public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE, /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchronized block/method or * reenter a synchronized block/method after calling * {@link Object#wait() Object.wait}. */ BLOCKED, /** * Thread state for a waiting thread. * A thread is in the waiting state due to calling one of the * following methods: * <ul> * <li>{@link Object#wait() Object.wait} with no timeout</li> * <li>{@link #join() Thread.join} with no timeout</li> * <li>{@link LockSupport#park() LockSupport.park}</li> * </ul> * * <p>A thread in the waiting state is waiting for another thread to * perform a particular action. * * For example, a thread that has called <tt>Object.wait()</tt> * on an object is waiting for another thread to call * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on * that object. A thread that has called <tt>Thread.join()</tt> * is waiting for a specified thread to terminate. */ WAITING, /** * Thread state for a waiting thread with a specified waiting time. * A thread is in the timed waiting state due to calling one of * the following methods with a specified positive waiting time: * <ul> * <li>{@link #sleep Thread.sleep}</li> * <li>{@link Object#wait(long) Object.wait} with timeout</li> * <li>{@link #join(long) Thread.join} with timeout</li> * <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li> * <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li> * </ul> */ TIMED_WAITING, /** * Thread state for a terminated thread. * The thread has completed execution. */ TERMINATED; }
1、NEW: 线程还没有启动的时候, 状态就是 NEW
即 新建状态
2、RUNNABLE: 当一个线程处于运行中或者等待CPU调度的时候, 状态就是 RUNNABLE
状态; 有些地方也称为 就绪状态
3、BLOCKED: 当一个线程在等待别的线程释放锁资源的时候, 状态就是 BLOCKED
, 或者在该线程获取到锁之后, 在同步代码块里面调用了Wait方法, 这时候释放锁, 在获取到其他线程的notify或者notifyAll通知之后, 重新进入 同步代码块这段时间 该线程也是 BLOCKED
状态的;
4、WAITING: 当正在运行的线程调用了 Object.wait()
方法 或者 Thread.join()
方法 或者 LockSupport.park()
方法之后, 会进入到 WAITING
状态
5、TIMED_WAITING: 当正在运行的线程调用 Object.wait(n)
或者 Thread.join(n)
或者 LockSupport.parkUntil(blocker, n)
会进入到 TIMED_WAITING
状态
6、TERMINATED: 当线程结束后, 会进入到 TERMINATED
状态.
状态转换如下, 该图中比 Java 的状态多了一个RUNNING状态, 来区别 线程的就绪状态 与 运行状态 更加方便读者理解;
下面来看一下线程的状态转换用Java怎么实现:
以上所述就是小编给大家介绍的《Java基础之线程Thread》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【重回基础】线程池源码剖析:Worker工作线程
- Java 多线程(五)—— 线程池基础 之 FutureTask源码解析
- 并发与多线程基础
- Java 并发编程基础 ① - 线程
- JStorm 源码解析:基础线程模型
- Java 线程基础,从这篇开始
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Parsing Techniques
Dick Grune、Ceriel J.H. Jacobs / Springer / 2010-2-12 / USD 109.00
This second edition of Grune and Jacobs' brilliant work presents new developments and discoveries that have been made in the field. Parsing, also referred to as syntax analysis, has been and continues......一起来看看 《Parsing Techniques》 这本书的介绍吧!