多线程(1)

一、多线程介绍

多线程概念:

线程和进程是多对一。协程;;只是程序概念。线程只在多核CPU中能发挥优势。

是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

多线程的优势:

(1)提高应用程序的响应速度(程序启动,耗时程序尽量放在单独线程中处理)。这对于开发图形界面的程序尤为重要,当一个操作耗时很长时,整个系统都会等待这个操作,程序就不能响应键盘、鼠标、菜单等的操作,而使用多线程技术可将耗时长的操作置于一个新的线程,从而避免出现以上问题。

(2)使多CPU系统更加有效。当线程数不大于CPU数目时,操作系统可以调度不同的线程运行于不同的CPU上。

(3)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为独立或半独立的运行部分,这样有利于代码的理解和维护。

多线程的特点:

(1)多线程程序的行为无法预期,当多次执行上述程序时,每次的运行结果都可能不同。

(2)多线程的执行顺序无法保证,它与操作系统的调度策略和线程优先级等因素有关。

(3)多线程的切换可能发生在任何时刻、任何地点。

(4)由于多线程对代码的敏感度高,因此对代码的细微修改都可能产生意想不到的结果。

多线程的生命周期:

多线程(1)_第1张图片

失去处理器资源指线程调度(CPU不是一直在跑一个程序)
多线程(1)_第2张图片

就绪队列:按照线程优先级进行排序。优先级低的程序,在一定时间内未执行,操作系统会提升优先级。取决于操作系统。

接口解析:

QThread类为线程类,提供一个平台相关的方式去管理线程。

//run方法,由QThread类的派生类实现该方法,里面包含线程需要做的工作
[protected] virtual void run();

//线程等待,当前线程等待该子线程运行time时间,单位ms。默认值表示一直等待直到子线程运行结束。
bool wait(unsigned long time = ULONG_MAX)

//设置该线程的优先级:
void setPriority(Priority priority)

//槽函数:启动线程
[slots] void start(Priority priority = InheritPriority)

//槽函数:结束线程,调用之后线程不会立刻结束,需要与wait()方法配合使用
[slots] void terminate()

//信号:当线程运行完成时,发射该信号。常与QObject::deleteLater()配合使用
[slots] void finished()

//信号:线程启动时,run()方法被调用前发射该信号,代表线程已经启动。
[signals] void started()

QThread::Priority

枚举值 说明
QThread::IdlePriority 0 仅在没有其他线程运行时才执行,优先级最低
QThread::LowestPriority 1 优先级低于LowPriority
QThread::LowPriority 2 优先级低于NormalPriority
QThread::NormalPriority 3 操作系统的默认优先级
QThread::NormalPriority 4 优先级高于NormalPriority
QThread::HighestPriority 5 优先级高于HighPriority
QThread::TimeCriticalPriority 6 优先级高于HighPriority
QThread::InheritPriority 7 与主线程的优先级相同,默认值

你可能感兴趣的:(java,c++,jvm)