(一)线程简介
1、什么是线程
线程是CPU独立运行和独立调度的基本单位(可以理解为一个进程中执行的代码片段),进程是资源分配的基本单位(进程是一块包含了某些资源的内存区域)。进程是线程的容器,真正完成代码执行的是线程,而进程则作为线程的执行环境。一个程序至少包含一个进程,一个进程至少包含一个线程,这些线程都拥有各自的计数器、堆栈、和局部变量等属性,一个进程中的多个线程共享当前进程所拥有的资源。
2、为什么要使用多线程
(1)更多的处理器核心
(2)更快的相应时间
(3)更好的编程模型
3、线程的状态
java线程在运行的生命周期中可能处于表中6钟不同的状态,在给定的一个时刻,线程只能处于其中的某一个状态。
运行下面一段代码:
public class ThreadState {
public static void main(String[] args) {
new Thread(new TimeWaiting(),"TimeWaitingThread").start();
new Thread(new Waiting(),"WaitingThread").start();
new Thread(new Blocked(),"BlockedThread-1").start();
new Thread(new Blocked(),"BlockedThread-2").start();
}
static class TimeWaiting implements Runnable {
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class Waiting implements Runnable {
public void run() {
while(true) {
synchronized (Waiting.class) {
try {
Waiting.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
static class Blocked implements Runnable {
public void run() {
synchronized (Blocked.class) {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
使用jdk/bin目录下jps命令:
然后使用:jstack 2499命令可以看到结果如下图:BlockedThread-1进入锁,一直在等待,状态为TIME_WAITING;BlockedThread-2为Blocked状态,WaitingThread为WAITING状态;TimeWaitingThread线程为TIME_WAITING状态。
通过实例,我们了解了java程序运行中线程状态的具体含义,线程在自身的生命周期中,不是始终处于某个状态,而是不停的变换状态。