一、进程与线程

进程:
正在运行的程序,是系统进行资源分配和调度的独立单位,每一个进程都有他自己的内存空间和系统资源。
多进程的意义:
在一个时间段内执行多个任务,提高CPU的使用率

线程:
同一个进程可以执行多个任务,每一个任务可以看成是一个线程
是程序的执行单元,执行路径

线程不是进程,但它的行为很像进程,线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程

单线程:程序只有一条执行路径
多线程:程序由多条执行路径

多线程的意义:
为了提高应用程序的使用率

并行和并发:
并行:在某一时间内同时运行多个程序
并发:在某一时间点同时运行多个程序

二、Java程序的运行原理

由Java命令启动JVM,JVM启动就相当于启动了一个进程
紧接着有该进程创建了一个主线程去调用main方法

三、如何实现多线程:

由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来。进程是系统创建的,所以我们应该去调用系统功能创建一个进程。但是Java是不能直接调用系统功能的,所有我们没有办法直接实现多线程。但是,Java可以去调用C/C++写好的程序来实现多线程程序,由C/C++去调用系统功能创建线程,如何由Java去调用这个东西,如何提供一些类供我们使用,就可以实现多线程了。

1、多线程的实现方法:
方法一:继承Thread类
(1)自定义类继承Thread类
(2)类中重写run()方法(为了区分哪些代码能被执行,用run方法包含被执行的代码)
(3)创建对象
(4)启动线程

代码:

class MyThread extends Thread{
	@Override
	public void run() {
		for(int i = 0;i <= 200;i ++) {
			System.out.println(getName()+"---"+i);
		}
	}
}
public class ThreadDemo {
	public static void main(String[] args) {
		MyThread m1 = new MyThread();
		MyThread m2 = new MyThread();
		
		m1.setName("线程一");
		m2.setName("线程二");
		
		m1.start();
		m2.start();
	}
}

2、设置线程的优先级:
public final void setPriority(int newPriority)
线程默认优先级是5
线程优先级的范围是:1-10
线程优先级高仅仅表示线程获得CPU时间片的机率高。

3、方法:

线程休眠:
public static void sleep(long millis):在指定毫秒数内让正执行的线程休眠
线程终止:
public final void join():等待此线程终止其他线程再进行
礼让线程:
public static void yield():展厅当前正在执行的线程对象,并执行其他线程
守护线程:
public final void setDaemon(boolean on):将该用户标记为守护线程或用户线程
当正在运行的线程都是守护线程是,Java虚拟机退出,该方法必须在启动线程前调用
中断线程:
public void interrupt():中断线程。把线程状态终止,并抛出一个InterrupterException
 

4、线程的生命周期:
新建:创建线程对象
就绪:有执行资格,没有执行权
运行:有执行资格,有执行权
死亡:线程对象变成垃圾,等待被回收