进程(process):一个正在执行的程序,称为进程。(单个cpu无法同时运行多个进程,只能交替轮流运行)
线程是进程的一个执行序列,一个进程可以包含多个线程。
线程的生命周期:
Java提供了Thread类来实现多线程。
java中提供了继承Thread类和实现Runnable接口两种方法用于创建线程类。(还可以使用第三方库,略)
继承Thread类:
可通过继承Thread类,并重写其中的run()方法来定义线程体,以实现线程的具体行为,然后创建该子类的对象,并启动线程。启动线程:线程类对象.start()
public class 线程类名 extends Thread {
……
public void run(){
…… //编写线程的代码
}
}
实现Runnable接口:
任何类都可以实现Runnable接口,而这个类的实例将用一个线程来调用,启动该类的run()方法。Runnable接口只有一个run()方法,其作用和Thread类的run()方法相同。
public class 目标类名 implements Runnable {
……
public void run(){
…… //编写线程的代码
}
}
启动线程:
以目标类为参数创建 Thread 类的对象 .start(); 例如PingPong2 pp1=newPingPong2(“ping”,500));//Pingpong2实现Runnable接口。
Thread t1=new Thread(pp1);
t1.start();
两种方法的对比:
由继承Thread类创建线程的方法简单方便,可以直接操作线程,无需使用Thread.currentThread()。但不能再继承其他类;
使用Runnable接口方法可以将CPU,代码和数据分开,形成清晰的模型;还可以从其他类继承;保持程序风格的一致性。
另:
关于线程栈和线程的变量
线程栈是
指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。
Runtime类(运行时类)和Process类(进程类)
Runtime类:提供JVM启动系统接口及运行平台的相关信息。在程序运行时才产生该类对象。
Process:与当前在执行的进程相关的类。
例:运行记事本并输出终止值
public class RuntimeTest {
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
System.out.println("running notepad.exe...");
try {
Process p = runtime.exec("notepad.exe");
int exitValue = p.waitFor();
System.out.println("stopping run notepad.exe");
System.out.println("exitvalue:"+exitValue);
} catch (IOException | InterruptedException e) {
// TODO 自动生成的 catch 块
//e.printStackTrace();
System.out.println("runtime error");
}
}
}
(未完待补充)