1、进程和线程的概念理解
搞开发是用程序去完成一个功能,这个功能一般由一个进程实现(也可以由多个进程实现,如谷歌浏览器会开多个进程,在windows任务管理器中可以看到,而Eclipse只有一个进程);
这个进程中不同的子功能可以使用不同的线程去完成(如聊天程序中,一个线程发送消息,一个线程接收消息)。
PS:线程是一个轻量级的进程。
进程是对于操作系统的程序运行单元,线程是对于编程语言的运行单元。(如可以用C或Java开发一个单进程的聊天程序,这个进程可以在操作系统的任务管理器中看到;而不同的编程语言实现线程的方式不同,但都能用多线程来完成程序聊天的功能)
2、Java中可以通过Process创建一个操作系统进程,Thread创建一个线程。
PS:进程使用操作系统的任务管理器可以看到;线程的状态在创建改线程的主线程中才能看到。
3、进程和线程的状态
操作系统进程状态: 运行态, 就绪态, 等待态( 阻塞态、封锁态、睡眠态)
java中线程的状态(java.lang.Thread.State):New/Runnable/Blocked/Wait/Time_wait/Terminated
4、通过main方法理解线程与进程
package com.demo;
public class Test02 {
public static void main(String[] args) {
Ps p1 = new Ps();
p1.start();
Ps p2 = new Ps();
p2.start();
while(true){
System.out.println(System.currentTimeMillis()+"\t"+Thread.currentThread().getName());
}
}
}
class Ps extends Thread{
@Override
public void run() {
while(true){
System.out.println(System.currentTimeMillis()+"\t"+this.getName());
}
}
}
在命令行编译执行,在任务管理器可以看到java.exe进程
而在main线程中,可以获取子线程的运行参数。
PS:执行java com.demo.Test02 运行main函数时,操作系统新创建一个新的JVM并分配资源(内存/cpu等)给该进程,然后JVM加载字节码文件并解释执行(运行main方法);执行过程中在main线程中又创建两个子线程并启动子线程(在main线程中可以查看子线程的运行参数)。