一、进程与线程
1.进程是什么?
简单来说进程就是在内存中进行的程序,每个进程也都有自己独立的内存空间,其包含一个或多个线程。
2.线程是什么?
线程就是进程中一个单一顺序的控制流,负责当前进程中程序的执行。
二、两者区别是什么 ?
上面简单的说了一下进程和线程,那么他们之间的区别在哪里?进程是一种动态概念,是程序执行时相关资源分配的最小单元,其至少包含一个线程。而线程是经常的控制单元,是CPU分配资源时的最小单元,需求的资源比进程要少可以看做是一个轻量级的进程,会共享进程中的内存,线程有独立的空间(栈、程序计数器),相互通信更加方便。
三、串行,并发与并行
串行:就是多个指令一次执行
并发:每个线程单独执行一段指令,一个CPU在线程间切换(并不是同时执行)
并行:多个CPU内核同时执行多个线程,线程是同时执行的
四、线程的实现方式
1.继承Thread类
继承Thread会重写run()方法,然后调用start()方法来执行:
class MyThreads extends Thread{
/**
* 自定义线程类
*/
public void run(){
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() +"执行了" +i);
}
}
}
public class MyThread{
public static void main(String[] args) {
MyThreads myThread = new MyThreads();
myThread.start();
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() +"执行了" +i);
}
}
那么run和start这两种有什么区别???
以本人浅薄的知识来解释就是,start会启动新的线程,不会对主线程有影响,而run只在主线程中执行
2.实现Runnable接口
实现run方法,然后创建实现Runnable接口的对象,传入Thread对象中,之后启动线程
/**
* 实现Runnable接口的类
*/
class MyRunnable implements Runnable{
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.cu