谈谈对线程和进程的理论认识
进程是系统分配和调度资源的一个独立单位。这里我也说说程序,程序是一个静态的代码。说白了程序是死的。进程是活的。关于线程是CPU调度和分派的基本单位。线程是进程的实体,一个进程由多个线程组成。可以这样说,一个程序的运行至少会创建一个进程,一个进程里面至少包含一个线程。且进程的切换必然会引起的线程的切换,但是线程的切换不一定会引起进程的切换。我理解为一个进程管理一组线程。
我说这些主要是想说java的多线程。首先明白一点,只有分时系统才会有多线程这个概念。现在主流的操作系统基本都是分时系统。
还有我想说线程的多个状态。
这是网上截下的一幅图片
粗虐的说只有五种状态:创建,就绪,执行,阻塞,销毁
首先创建一个线程。线程进入就绪状态,当线程获得cpu资源的时候就会进入运行状态。如果时间片用完就又会回到就绪状态。要不运行态的线程可能遇到某种请求会从运行状态到阻塞状态。如果恢复请求则由阻塞态到就绪态。要不运行态执行完后直接进出销毁状态。
这就是一个线程的整个生命状态。
扩展:挂起状态是内存调入外存的状态。一般处于由动态就绪到静态就绪的时候。
这些是计算机操作系统上面大概的意思。下面我说说。
Java中如何表示五个状态表示的。
1. 当new的时候代表一个线程已经创建了。
2. 当调用start()方法的时候的,线程程就开始进入就绪状态。
3. 然后调用内部的run(),在调用的时候,该线程处于执行状态,当线程正常运行完run*()方法的时候就代表的了该线程处于销毁状态。
4. 但如果在run()方法中调用了sleep()那么该线程就会进入到阻塞状态。
5. 要不调用wait方法线程就会进入等待状态,直到解锁才会到达就绪状态。
其中有一个很重要,如何让就绪状态到运行状态。其实获得cpu的时候有优先级,一般默认的优先级符号是5,一共是10个优先级。如果一个线程符号是10那么优先级最大,如果一个线程的符号是1,优先级最小。
在下面一篇我会附上关于java线程编程的源代码。