概念
并发和并行
并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。
和单核 CPU 不同,多核 CPU 真正实现了“同时执行多个任务”
-
并发:同一时间段内发生的两个或多个事情(单核 CPU )相当于一个时间段内要做好多事情,但是一次只能做一件 例如:我下班回到家里又要做饭又要拖地
-
并行:同一时刻发生的两个或多个事情(多核 CPU )一个时间点上同时在做两件事情例如:我有女朋友,我下班回家后,我来做饭,女朋友来拖地,两个事情在同时进行
进程和线程
- 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。
- 线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。
创建线程
继承Thread 类
- 创建子类继承Thread
- 重写子类中的run方法实现业务需求
- 创建子类对象
- 调用start方法实现
//1、创建继承Thread类
class MyThread extends Thread{
//2、重写run方法
@Override
public void run() {
for (int i = 0; i < 10; i++) {
//
System.out.println("另外的线程"+ i);
}
}
}
public class Tthread {
public static void main(String[] args) {
//3、创建子类对象
MyThread myThread = new MyThread();
//4、调用start方法
myThread.start();
// 主线程
for (int i = 0; i < 100; i++) {
//
System.out.println("主线程" + i);
}
}
}
实现Runnable接口
- 定义Runnable接口的实现类, 重写该接口的run0方法,该run()方法的方法体同样是该线程的线程执行体。
- 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象,
- 调用start方法启动线程
//创建类实现Runnable接口
class MyRunnable implements Runnable{
//重写接口中的run方法
@Override
public void run() {
for (int i = 0; i < 10; i++) {
//
System.out.println("第二个线程"+ i);
}
}
}
public class thread2 {
public static void main(String[] args) {
//创建Runnable实现类的实例
MyRunnable myRunnable = new MyRunnable();
//实例作为Thread的target来创建Thread对象
Thread thread = new Thread(myRunnable);
//调用start方法启动线程
thread.start();
for (int i = 0; i < 300; i++) {
//
System.out.println("主线程"+ i);
}
}
线程的执行顺序是杂乱无规律的
线程常用方法
public static void sleep(long millis)
当前线程主动休眠millis 毫秒。
public static void yieldl)
当前线程主动放弃时间片,回到就绪状态,竞争下一次时间片。
public final void join()
允许其他线程加入到当前线程中。
public void setPricritytint)
线程优先级为1-10,默认为5,优先级越高。表示获取CPU机会越多。
public voi setDaermon(boolean)
设置为守护线程线程有两类:用户线程(前台线程)、守护线程〔后台线程)