1.线程基础概述
1.1进程与线程
进程概念:运行中的程序
线程概念:是进程中的一条执行路径,往往一个进程中会有多条执行路径--多线程案例:
迅雷---多任务同时下载JVM从main方法入口开始执行,这就是一个执行路径,我们叫做主线程;
可以在主线程中,创建其他线程,我们叫做子线程进程与线程的关系:
线程是cpu调度的基本单位,cpu切片切到谁就谁执行
一个进程可以包含多个线程,至少有一个线程
进程具有独立的资源空间,但是一个进程中的多个线程共享资源
线程的特点:随机互抢资源线程的组成:
cpu时间片: 由操作系统分配每个线程执行的时间
运行数据:
堆数据:实例化出来的线程对象
栈数据:线程引用指向实例化的对象
1.2线程的创建方式
- 创建一个类继承Thread
- 创建一个类实现Runnable接口
- 使用Callable和Future创建线程
- 使用线程池例如用Executor框架
- 详情参考--线程创建的四种方式_m0_37840000的博客-CSDN博客_创建线程的方式
1.2.1线程的创建方式1
//创建线程方式1: 创建一个类继承Thread
//案例:主线程和子线程,各打印200次(互抢资源方式)
//分析,1.创建线程继承Thread类,重写run方法,该方法就是子线程执行的区域
//2.实例化子线程对象,调用run方法执行
class MyThread extends Thread{
@Override
public void run() {
for(int i=1;i<=200;i++) {
System.out.println("子线程执行-->"+i);
}
}
}
public class Test1 {
public static void main(String[] args) {
//线程的启动:
//将当前线程对象放入线程组供cpu调度,当cpu调度到你,在内部调用run方法;
//没有调度到你,则是就绪状态
MyThread thread = new MyThread();
thread.start();
//thread.start(); //实例化一个线程对象,多次start 不可以
new MyThread().start();
for(int i=1;i<=200;i++) {
System.out.println("主线程执行-->"+i);
}
}
}
1.2.2线程的创建方式2
//创建线程方式2:实现一个任务的方式
//案例:主线程和子线程,各打印200次(互抢资源方式)
//Task实现Runnable任务
class Task implements Runnable {
@Override
public void run() {
for(int i=1;i<=200;i++) {