小工具知识网

当前位置: 首页 > 行业知识 > 多线程面试题汇总

行业知识

多线程面试题汇总

2026-11-13 07:54:26 来源:互联网转载

多线程面试题汇总

    • 一、多线程
      • 1、线程的生命周期
      • 2、线程的创建(函数创建)
      • 3、线程的创建(使用类)
      • 4、守护线程
      • 二、全局解释器锁
        • 1、使用单线程实现累加到500000000
        • 2、使用多线程实现累加到500000000
        • 3、总结
        • 三、线程安全
          • 1、多线程之数据混乱问题
          • 2、有了全局解释器锁(GIL)为什么还需要同步锁?
          • 3、同步锁
            • 3.1、加同步锁(with方法)
            • 3.2、加同步锁(acquire方法和release方法)
            • 四、锁
              • 1、同步锁
              • 2、递归同步锁
              • 3、条件锁
              • 4、事件锁
              • 5、信号量锁
              • 五、***锁
                • 1、案例:鱼和熊掌不可兼得问题
                • ��、进程与线程的区别

                  一、多线程

                  1、线程的生命周期

                  1、线程的创建:t=threading.Thread()

                  2、就绪状态:已经获得了除CPU之外的其他资源,正在参与调度,等待被执行,当调度完成之后,立即运行

                  3、启动状态:获得了CPU时间片段,正在运行

                  4、等待\阻塞状态:遇到time.sleep()时,会阻塞,暂时不参与调度,等待事件发生

                  5、中止状态:线程运行结束,run函数运行结束,等待系统回收其线程资源。

                  2、线程的创建(函数创建)

                  3、线程的创建(使用类)

                  t=MyThread(name=s[i]) 创建线程,里面的参数代表线程的名字,如果不传,系统会默认有一个名字

                  4、守护线程

                  当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就分兵两路,分别运行,那么当主线程完成想退出时,会检验子线程是否完成。如果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是只要主线程完成了,不管子线程是否完成,都要和主线程—起退出,这时就可以用setDaemon方法

                  输出结果:线程2还没有完整的执行完毕,遇到守护线程就终止执行了。

                  t.setDaemon(True) 当前的子线程设置为守护线程

                  守护线程:随着主线程的终止而终止,不管当前主线程下有多少子线程没有执行完毕,都会终。

                  二、全局解释器锁

                  1、GIL锁不是python的特点。而是cpython的特点。

                  每个线程在执行的时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU。在CPython中,每一个Python线程执行前都需要去获得GIL锁,获得该锁的线程才可以执行,没有获得的只能等待,当具有GIL锁的线程运行完成后,其他等待的线程就会去争夺GIL锁,这就造成了,在Python中使用多线程,但同一时刻下依旧只有一个线程在运行,所以Python多线程其实并不是「并行」的,而是「并发」。

                  1、使用单线程实现累加到500000000

                  import time,threadingdef task(n):    sum=0    while sum

上一篇:揭秘背后真相,深度解读关键要点,揭示将将的秘密!

下一篇:揭秘气球难题,为何无法顺利打开?砰砰声背后隐藏的秘密!