进程和线程:
进程:启动一个QQ.exe就叫一个进程。 接着又启动一个360.exe,这叫两个进程。以此类推,每个独立执行的程序都称为进程。
线程:线程是在进程内部同时做的事情,比如在QQ里,有很多事情要同时做,比如发送消息和接受消息,同时上传文件,这就是由多线程
来实现的。
如Windows任务管理器:可以看到,后台运行搜狗输入法这个程序看作是一个进程,而搜狗运行中又有多个线程在执行。可以说,进程包含多个线程。
对CPU来说:
系统可以分配给每个进程一段有限的执行 CPU 的时间(也称为 CPU 时间片),CPU 在这段时间中执行某个进程,然后下一个时间段又跳到另一个进程中去执行。由于 CPU 切换的速度非常快,给使用者的感受就是这些任务似乎在同时运行,所以使用多线程技术后,可以在同一时间内运行更多不同种类的任务。
单线程与多线程:
单线程的特点就是排队执行,也就是同步,就像在 cmd 中输入一条命令后,必须等待这条命令执行完才可以执行下一条命令一样。这就是单线程环境的缺点,即 CPU 利用率大幅降低。
多线程环境下的执行模式,CPU 完全可以在任务 1 和任务 2 之间来回切换,使任务 2 不必等到 n秒再运行,系统的运行效率大大得到提升。这就是要使用多线程技术、要学习多线程的原因。
代码示例:
class T extends Thread {
private Integer i = null;
public T(Integer i) {
this.i = i;
}
public void run(){//run分时线程
for (; ; ) {//for( ; ; )这是一个死循环
System.out.println (i++);
}
}//这就是一个执行线程
}
/**
* 必须要继承Thread
* <p>
* <p>
* 共享内存空间:
* 通过Run运行可以执行多个进程,而每个进程里包含
* 多个线程。这就是进程与线程的关系。
*/
public class 线程示例1 {
//main是主线程
public static void main(String[] args) {
Integer i = 0;
T t = new T (i);//创建一个线程
T t1 = new T (i);
t.start ();
t1.start ();//两个同时执行
}
}
输出:
可以看出,这里执行了一个程序,却开了多个线程。