1. 什么是线程
由于进程是资源拥有者,创建、撤消与切换存在较大的内存开销,因此需要引入轻型进程 即线程, 进程是资源分配的最小单位,线程是CPU调度的最小单位(程序真正执行的时候调用的是线程)。每一个进程中至少有一个线程。
2. 进程与线程的关系
举个栗子:一个屋子里有很多人,那么这个屋子就相当于一个进程,里面的每一个人就相当于一个线程。但进程不只是包含线程,还包含其他资源,数据库等。进程是资源的集合。
3. 进程与线程的区别和联系
运行方式不同:
进程不能单独执行,它只是资源的集合。进程要操作CPU,必须要先创建一个线程,所有在同一进程中的线程,是同享同一块进程所占的内存控件。
联系:
进程中第一个线程是主线程,主线程可以创建其他线程,其他线程也可以创建主线程,线程之间是平等的。
线程的实例方法:(了解即可)
- getName(): 获取线程的名称。 - setName(): 设置线程的名称。 - isAlive(): 判断当前线程存活状态。
4. run方法的继承:
代码演示:
#父类
class A:
def __init__(self):
print("父类init被触发")
def run(self):
print("父类的run方法被调用")
#子类
class B(A):
def run(self):
print("子类的run方法被调用")
if __name__ == '__main__':
b=B()
b.run()
运行结果:
5. 线程之间共享的全局变量:
代码演示:
import threading
num = 100
def work1():
global num
num += 1
print("work1...",num)
def work2():
global num
num += 1
print("work2...",num)
def main():
t1 =threading.Thread(target=work1)
t2 =threading.Thread(target=work2)
t1.start()
t2.start()
if __name__ == '__main__':
main()
运行结果:
6. 共享全局变量的问题:
代码演示:
import time
import random
from threading import Thread
num = 100
def work1():
global num
for i in range(3):
num += 1
time.sleep(random.random())
print("in work1,num = %d " %num)
def work2():
global num
for i in range(3):
num += 1
time.sleep(random.random())
print("in work2,num = %d" %num)
if __name__ == '__main__':
t1 = Thread(target=work1)
t2 = Thread(target=work2)
t1.start()
t2.start()
运行结果: