Java基础之进程、线程基础

108 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

1.1 进程

  • 进程:是正在运行的程序
    • 是系统进行资源分配和调用的独立单位
    • 每一个进行都有它自己的内存空间和系统资源
  • 进程的三个特征
    • 独立性:进程与进程之间是相互独立的,彼此有自己独立内存区域
    • 动态性:进程是运行中的程序,要动态的占用内存,CPU和网络等资源
    • 并发性:CPU会分时轮询切换依次为每个进程服务,因为切换的速度非常快,给我们的感觉像是在同时执行,这就是并发性(并发:同一时刻同时有多个在执行)

1.2 线程

  • 线程:是进程中的单个顺序控制流,是一条执行路径
    • 单线程:一个进程只有一条执行路径
    • 多线程:一个进程有多条执行路径

1.3 多线程的实现方式

1.3.1 方式1:继承Tread类

  • 流程

    • 1、定义一个MyTread类继承Tread类
    • 2、在MyTread类中重写run()方法
    • 3、创建MyTread类的对象
    • 4、启动线程:void start()
  • 为什么要重写run()方法?

    • 因为run()是用来封装被线程执行的代码
  • run()方法和start()方法的区别?

    • run():封装线程执行的代码,直接调用,相当于普通方法的的调用
    • start():启动线程,然后由JVM调用此线程中的run()方法
  • 范例

  • MyTread类:

package test;

//1、定义一类MyTread继承Tread类
public class MyThread extends Thread{
    ////2、在MyTread类中重写run()方法
    @Override
    public void run() {
        for(int i=0;i<100;i++) {
            System.out.println(i);
        }
    }
}
  • 测试类
package test;

public class Demo {
    public static void main(String[] args) {
        //3、创建MyTread类的对象
        MyThread my1 = new MyThread();
        MyThread my2 = new MyThread();

        //4、启动线程:void start():启动线程,由Java虚拟机调用此线程的run()方法
        my1.start();
        my2.start();
    }
}

1.3.2 方式2:实现Runnable接口

  • 流程
    • 1、定义一个MyRunnable类实现Runnable接口
    • 2、在MyRunnable类中重写run()方法
    • 3、创建MyRunnable类的对象
    • 4、创建Tread类的对象,把MyRunnable对象作为构造方法的参数
    • 5、启动线程
  • 好处:
    • 避免了Java单继承的局限性
    • 适合多个相同程序的代码取处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好地体现了面向对象的设计理论
package test;

public class Demo {
    public static void main(String[] args) {
        //3、创建MyRunnable类的对象
        MyRunnable mr = new MyRunnable();

        //4、创建Tread类的对象,把MyRunnable对象作为构造方法的参数
//        Thread t1 = new Thread(mr);
//        Thread t2 = new Thread(mr);
        //Thread(Runnable target,String name)
        Thread t1 = new Thread(mr,"高铁");
        Thread t2 = new Thread(mr,"飞机");

        //5、启动线程
        t1.start();
        t2.start();
    }
}