再美不及姑娘你
又见西风上碧树

一、进程

进程:进程是计算机中的程序关于某数据集合上的一次运行活动

1.进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。进程是整个现代操作系统的根本,操作系統是以进程为单位执行任务。

2.是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

3.每个进程都有其自己的内存空间和系统资源

4.一个进程可以有多个线程

二、线程

线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

1.单线程:一个进程中只有一个线程

2.多线程:一个进程中同时存在多个线程

三、多线程的实现方式

方式一:继承Thread类

1.定义一个MyThread继承Thread类

2.在MyThread类中重写run()方法

3.创建MyThread类的对象

4.启动线程

MyThread类

public class MyThread extends Thread{
  @Override
  public void run() {
      for (int i=0;i<100;i++){
          System.out.println(i);
      }
  }
}

测试类

public class MyThreadDemo01 {
  public static void main(String[] args) {
      MyThread mt1=new MyThread();
      MyThread mt2=new MyThread();
      //void start()导致此线程开始执行;Java虚拟机调用此线程的run方法
      mt1.start();
      mt2.start();


  }
}

问题1:问什么要重写run()方法?

因为run()方法是用来封装被线程执行的代码

问题二:run()方法于start()方法的区别?

run():封装线程执行的代码,直接调用,相当于普通方法的调用

start():启动线程,由JVM调用此线程的run()方法

四、设置和获取线程名称

Thread类中设置和获取线程名称的方法

设置线程名称:void setName(String name):将此线程的名称更改为等于参数name

获取线程名称:void getName():返回此线程的名称

可以使用无参构造或者带参构造两种方式,带参构造需要创建带参构造方法调用父类的方法

MyTread类

public class MyThread extends Thread{
  //无参构造
  public MyThread(){}
  //带参构造
  public MyThread(String name){
      super(name);
  }
  @Override
  public void run() {
      for (int i=0;i<100;i++){

          //使用getName()获取线程名称
          System.out.println(getName()+":"+i);
      }
  }
}

测试类

/*启动多线程
方式一:继承Thread类
1.定义一个MyThread继承Thread类
2.在MyThread类中重写run()方法
3.创建MyThread类的对象
4.启动线程
* */
public class MyThreadDemo01 {
  public static void main(String[] args) {
      MyThread mt1=new MyThread();
      MyThread mt2=new MyThread();
      //void start()导致此线程开始执行;Java虚拟机调用此线程的run方法
      //使用setName()设置线程名称
      mt1.setName("一");
      mt2.setName("二");
      //方式二 使用带参构造进行
      MyThread mt3=new MyThread("三");
      MyThread mt4=new MyThread("四");//报错是因为MyThread类中没有带参构造,需要加进去
      mt1.start();
      mt2.start();
      mt3.start();
      mt4.start();
  }
}

static Thread currentThread()方法:返回对当前正在执行的线程对象的引用

     //static Thread currentThread()方法:返回对当前正在执行的线程对象的引用
      System.out.println(Thread.currentThread().getName());

 

posted on 2022-04-13 17:55  再美不及姑娘你  阅读(67)  评论(0)    收藏  举报