线程程序运行的基本步骤如下:
创建线程
继承Thread类:创建一个Thread类的子类,并重写其run()方法。
实现Runnable接口:实现Runnable接口,并将其实例作为Thread类的target。
启动线程
调用start()方法:通过调用Thread类的start()方法来启动线程。启动后,start()方法会立即返回,不会等待run()方法执行完毕。
线程调度
操作系统调度:操作系统负责线程的CPU调度。线程在启动后会被放入就绪队列,等待CPU分配时间片执行。
状态转换:线程在生命周期中会经历新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)等状态。
执行run()方法
线程执行:当线程获得CPU时间片后,会执行其run()方法中的代码。
共享资源:线程可以共享进程中的资源,如内存、文件句柄等。
线程结束
自然结束:run()方法执行完毕后,线程自然结束。
强制结束:可以通过调用线程对象的join()方法等待线程结束,或者在主线程中通过其他方式终止线程。
示例代码
```python
import threading
def print_numbers():
for i in range(5):
print(i)
创建线程
thread = threading.Thread(target=print_numbers)
启动线程
thread.start()
等待线程结束
thread.join()
```
多线程并发执行
多线程可以并发执行不同的任务,提高程序的执行效率。例如:
```python
import threading
def print_hello():
print("Hello, World!")
def print_numbers():
for i in range(5):
print(i)
创建两个线程
t1 = threading.Thread(target=print_hello)
t2 = threading.Thread(target=print_numbers)
启动线程
t1.start()
t2.start()
等待线程结束
t1.join()
t2.join()
```
总结
线程程序通过创建线程对象并调用其start()方法来启动线程,线程在操作系统调度下执行run()方法中的代码。线程的生命周期包括新建、就绪、运行、阻塞和死亡等状态,线程之间可以共享进程资源,但每个线程有自己的调用栈和寄存器环境。通过合理地管理线程,可以实现高效的并发编程。