基本概念
1.CPU的核心数 和线程数的关系
核心数 :线程数 = 1:1 ; 超线程技术 1:2
2.CPU 时间片轮转机制
RR调度:给每一个进程分配一个时间段,这个时间段被称为该进程的时间片,进程允许运行的时间。过了这段时间片,会上下文切换。
3.什么是进程和线程
进程:程序运行资源分配的最小单位,一个进程内部可以有多个线程,多个线程会共享这个进程的资源,进程与进程之间相互独立
线程:cpu 调度的最小单位,本身不能独立运行,要依赖于进程。
4.澄清并行和并发
并行:同一时间段,处理事情的能力
并发:与时间单位相关的,单位时间内,处理事情的总数。
举个例子:一个食堂 有8个窗口,每个人打饭 需要30秒钟,所以一分钟内打饭16个人。
该食堂并发度为:16
并行度为:8
5.高并发编程的意义,好处与注意事项
- 共享资源,提高效率。
- 存在冲突,死锁
- 太多的线程,就有可能搞垮机器
启动线程的三种方式:
- 类 Thread
- 接口 Runnable
- 接口 Callable
public class NewThread {
private static class UseThread extends Thread {
@Override
public void run() {
System.out.println("I am extends Thread");
}
}
/* 实现Runnable接口*/
private static class UseRun implements Runnable {
@Override
public void run() {
System.out.println("I am implements Runnable");
}
}
/* 实现Callable接口,允许有返回值 */
private static class UseCall implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("I am implements Callable");
return "CallResult";
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
UseRun useRun = new UseRun();
new Thread(useRun).start();
UseThread useThread = new UseThread();
useThread.start();
UseCall useCall = new UseCall();
FutureTask<String> stringFutureTask = new FutureTask<String>(useCall);
new Thread(stringFutureTask).start();
System.out.println(stringFutureTask.get());
}
}
运行结果: