1.并发和并行
并发:两个或多个事件在同一时间段内发生
并行:两个或多个时间在同一时刻发生(同时发生)
2.线程与进程
- 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行同一个程序即使一个进程从创建、运行到消亡的过程
- 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
2.1进程
ROM:Read-Only Memory
只读内存简称,只读存储器—-硬盘
RAM:Random Access Memory
随机存取存储器—-内存
2.2线程

3.线程调度
- 分时调度
- 所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间
- 抢占式调度
4.2内存图解
5.Thread类
5.1获取和设置线程名
Thread类中设置和获取线程名称的方法
- void setName(String name):将此线程的名称更改为等于参数name
- String getName():返回此线程的名称
- 通过构造方法也可以设置线程名称
如何获取main()方法所在的线程名称?
- public static Thread currentThread():返回对当前正在执行的线程对象的引用 ```java package com.study_01.getName;
public class MyThread extends Thread{ public MyThread() { }
public MyThread(String name) {// 把线程名称给父类,让父类给他取名字super(name);}@Overridepublic void run() {// 获取线程名称System.out.println(Thread.currentThread().getName());}
}
```javapackage com.study_01.getName;public class Demo01GetThreadName {public static void main(String[] args) {// 开启多线程MyThread mt = new MyThread();mt.setName("子线程1");mt.start();// 开启多线程new MyThread("子线程2").start();System.out.println("main:"+Thread.currentThread().getName());}}/*子线程1子线程2main:main*/
5.2 线程控制

public class Demo01Sleep {public static void main(String[] args) {for (int i = 0; i < 20; i++) {System.out.println(i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}
5.3通过Runable来实现多线程
package com.study_04.Runable;public class RunableImpl implements Runnable {@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName() + "-->" + i);}}}
package com.study_04.Runable;public class Demo01Runable {public static void main(String[] args) {RunableImpl run = new RunableImpl();Thread t = new Thread(run);t.start();for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName() + "-->" + i);}}}
5.4匿名内部类实现多线程
package com.study_05.InnerClassThread;public class Demo01InnerClassThread {public static void main(String[] args) {// 线程的父类是Thread// new MyThread().startnew Thread(){@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}}.start();// 线程的接口Runnable// Runnable r = new RunnableImpl(); // 多态Runnable r = new Runnable(){// 重写run方法设置线程任务@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}};new Thread(r).start();// 简化接口的方式new Thread(new Runnable(){@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}}).start();}}

