线程与进程理论知识学习1

tech2022-10-01  60

CPU核心和线程数的关系

以前是一个核心一个线程

现在超线程技术  一个核心 两个线程 

 

1、基础概念

     进程:操作系统管理的最少单元

     线程:CPU调度的最小单元 

    一个进程包含多个线程

    CPU时间片轮转机制   一种调度算法RR调度

    并行和并发

    并行:几条路同时过

     并发:10秒钟,服务器的吞吐量

    高并发编程意义、好处

    1、冲分利用CPU资源

    2、加快用户响应时间

    3、提高代码的模块化、异步化、简单化

    注意事项:线程之间的安全性(多个线程对一个变量修改)线程的死锁  线程太多导致卡死

2、Thread.start    .start才证明是个线程,调用native,调用底层

     extends Thread 线程  

     implements Runnable任务  需要寄托Thread

     implements Callable  有返回时 需要寄托Thread FutureTask 

ThreeThread threeThread=new ThreeThread();

FutureTask<String> futureTask=new FutureTask(threeThread);

new Thread(futureTask).start();

3、重要机制

    中止线程   run函数执行完(thread.interrupt修改isInterrupted为true)

   thread  isInterrupterd()

 runnable Thread.currentThread().isInterrupterd()

   Callable   同理

    守护线程  setDaemon

    A调用线程,设置的守护线程就守护A,A执行结束,守护线程必须结束

4、梳理面试题

    1、run和start的区别?

    run就是一个函数调用,start会走底层,走系统层,最终调度到run函数

    2、 如何控制线程的执行顺序?

    join来控制  让t1线程获取执行权利,能够做到顺序执行

    3、并行和并发?

    并行就是:同时走  并发:单位时间内,服务器吞吐量

    4、在Java中能不能指定CPU去执行某个线程?

    不能,C语言调用内核API去执行才行

    5、在项目开发中,会考虑线程优先级吗?

    不会,做不到,线程优先级依赖与系统的平台,不稳定的,无法对号入座,不可靠,比如:java优先级10级,操作系统只有2-3级,对不上

    6、sleep和wait的区别

    sleep是休眠,时间已过,就有执行的资格了,不是立即执行,是有资格,等待操作系统调度,wait是等待,需要唤醒,唤醒后,才有资格,sleep是无条件休眠,wait是某些原因等待    

    7、java能不能强制终端线程执行?

    stop函数不推荐使用,暴力,很危险,interrupt可以处理线程的停止,是协作式的方式,不能保证立即中断。

    8、如何让出当前线程的执行权?

    yield,JDK内部实现才能用到,让出执行权

    9、sleep和wait哪个函数会清除标记?

    sleep捕获异常之前,会清除标记,再捕获异常的地方发起中断就可以中断了

 

    

 

最新回复(0)