一、线程的概念?
线程:表示一条独立的执行流,java虚拟机允许程序拥有多个线程,每个线程拥有独立的栈和程序计数器。
二、线程的生命周期
- NEW: 创建一个新线程。
- RUNNABLE: 处于可运行状态 (可能是运行中也可能是等待来自操作系统的调用)。
- BLOCKED: 等待监视器锁定而被阻止的线程的线程状态,处于阻塞状态的线程正在等待监视器锁进入同步块/方法。
- WAITING: 线程调用了如下方法而处于等待状态,Object.wait(),Thread.join()等。
- TIMED_WAITING: 线程调用了如下方法而处于超时等待状态,Object.wait(long),Thread.join(long)等,超过时间,线程会自动唤醒。
- TERMINATED: 线程消亡,线程执行完成或者线程异常导致线程执行终止。
三、创建线程的方式
- 继承Thread类
- 实现Runnable
- 实现Callable
- 线程池
四、线程常用方法
- 是否守护线程?
public final boolean isDaemon() {
return daemon;
}
- 线程sleep ,线程休眠期间会让出cpu资源
public static native void sleep(long millis) throws InterruptedException;
- 线程yield,向调度程序告知,当前线程愿意放弃线程资源,至于调度器采不采纳不知道。
public static native void yield();
- 线程join ,让调用线程join方法的线程等待该线程结束
public final void join() throws InterruptedException {
join(0);
}
五、线程的优缺点
- 充分利用多cpu的处理能力,单线程只能利用一个cpu,多线程就能从分利用多cpu的处理能力
- 更好的例如IO资源,例如:网络请求,多个请求可以使用多个线程实现;多数据量用多线程实现快速处理等。