CPU运行原理
进程
- 即每个应用程序启动后形成的进程,分配内存,硬盘资源给进程
线程
- 每个进程实际是靠线程进行运行的,不能独立存在,必须依托于进程
- 最小单位时间内可并行线程数量=cpu的核心组
- 单位时间内可消化的进程数量即为并发数量
CPU时间片轮转
- CPU多核时候,在进行任务调度处理时候,需要进行线程间的切换
- 切换线程的时候需要进行原有线程的数据保留,方便下次进入是进行数据获取,所以会有性能开销
- 所以在实际开发过程中结合实际情况避免此情况
Thread 方法
线程的启动方式
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
ThreadLocal(Sping 事务实现)
内存溢出情况 ThreadLocal
线程共享协作 volatile
- 线程在频繁切换调度时候,由于CPU的缓冲区数据还未写入到内存中导致有时无法获取正确的预期结果,volatile关键字进行变量修饰就是为了解决这个问题
- 线程中的变量协作,使用 volatile关键字修饰的变量可在线程中获取最新结果
引用
强引用 -> 软引用 -> 弱引用 -> 虚应用