1.如何理解线程与进程?
进程:操作系统进行资源调度和分配的基本单位(例如浏览器,APP,JVM)。
线程:进程中的最小执行单位,是 CPU 资源的分配的基本单位(可以理解为一
个顺序的执行流)。
p.s.多个线程可以共享其所属进程的所有资源。
2.如何理解多线程中的并发与并行?
2.1并发:多线程抢占CPU,可能不同时执行,侧重与多个任务交替执行。
现在的操作系统无论是 windows,linux 还是 macOS 等其实都是多用户多任
务分时操作系统,使用这些操作系统的的用户可以“同时”干多件事情。但实际
上,对于单机 CPU 的计算机而言,在同一时间只能干一件事,为了看起来像是
“同时干多件事”分时操作系统把 CPU 的时间划分成了长短基本相同的时间区
间,即“时间片”,通过操作系统的管理,把时间片依次轮流的分配给各个线程
任务使用。我们看似的“同时干多件事”,其实是通过 CPU 时间片技术并发完
成的。
2.2并行:线程可以不共享 CPU,可每个线程一个 CPU 同时执行多个任务。
总之:个人认为并行只出现在多 CPU 或多核 CPU 中,而并发可理解为并行中的
一个子集。
3.线程的生命周期
这些状态可归纳为:状态分别为新建状态,就绪状态,运行状态,阻塞状态,死亡状态。
public class TestThread01 {
static String content;
public static void main(String[] args) throws InterruptedException {
Thread t=new Thread(){
@Override
public void run() {//运行状态 执行结束 线程处于死亡状态
content="hello";
}
};//新建状态
t.start();;//就绪(可运行状态)
//1. Thread.sleep(1000);
//存在问题:不确定 到底要睡多久也就是 不确定t线程何时执行完毕
//2.t.join(10);//让t线程执行结束 主线程阻塞
//存在问题:假如t线程中有大量操作 主线程会一直等待 影响效率
//3.while(contain==null);
//存在问题:主线程会一直循环 一直抢占资源
// t线程什么时候抢到CPU时间不确定,消耗资源
while (content==null){
Thread.yield();
//让当前线程放弃CPU 处于就绪状态
}
System.out.println(content.toUpperCase());
}
}