Java基础——线程(1)

1、基本概念——什么是线程?

  提及到线程就不得不说比线程 “大”的两个概念——进程、程序。

  程序:完成特定任务、用某种语言编写的一组指令的集合,即我们写的能完成某种功能静态代码;

  进程:进程就是我们写的程序执行的过程,是一个动态的过程。它有生命周期——产生、执行、销毁;

  下面才是线程登场的时候,将进程执行过程进行细化,每一个执行不同的任务的单元,便是线程。书本的定义:线程是操作系统能够进行运算调度的最小单位。

2、Java如何创建线程?

Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。

Thread类的特性:

  1. 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体;
  2. Thread对象通过start()方法来启动这个线程,而非直接调用run();

Java在1.5之前提供的两种创建线程的方法:

  1、继承Thread类的方式;

  • 定义子类继继承Thread类;  
  • 子类重写Thread()类中的Run方法,方法中为业务程序; 
  • 创建Thread子类的对象,即创建了线程对象;
  • 调用线程对象start方法:启动线程,run方法被调用。
/**
 * @author iwang
 * @date 2019/10/27-14:36
 * @desc 定义子类继继承Thread类(第一步)
 */
public class FirstThread extends  Thread {
    //重写Thread()类中的Run方法(第二步)
    @Override
    public void run() {
        System.out.println("线程run()方法被调用执行!");
    }
    public static void main(String[] args) {
        //创建Thread子类的对象,即创建了线程对象(第三步)
        FirstThread firstThread = new FirstThread();
        //调用线程对象start方法:启动线程,run方法被调用。(第四步)
        firstThread.start();
    }
}
View Code
  1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。
  2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU调度决定。
  3. 想要启动多线程,必须调用start方法。
  4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将抛出以上的异常“IllegalThreadStateException”。

  2、实现Runnable接口的方式;

  1. 定义子类,实现Runnable接口。
  2. 子类中重写Runnable接口中的run方法。
  3. 通过Thread类含参构造器创建线程对象。
  4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。
  5. 调用Thread类的start方法:开启线程,Runnable子类接口的run方法被调用。
/**
 * @author iwang
 * @date 2019/10/27-14:53
 * @Desc 定义子类,实现Runnable接口(第一步)
 */
public class SecondThread implements Runnable {
    //子类中重写Runnable接口中的run方法(第二步)
    @Override
    public void run() {
        System.out.println("线程run()方法被调用执行!");
    }

    public static void main(String[] args) {
        SecondThread secondThread = new SecondThread();
        //子类中重写Runnable接口中的run方法(第二步),将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中(第三步)
        Thread thread = new Thread(secondThread);
        //调用Thread类的start方法:开启线程,Runnable子类接口的run方法被调用(第五步)
        thread.start();
    }
}
View Code

两种方式区别与联系:

区别

  • 继承Thread:线程代码存放Thread子类run方法中。
  • 实现Runnable:线程代码存在接口的子类的run方法。

 实现方式的好处

  • 避免了单继承的局限性
  • 多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。

 

 

  

posted @ 2019-10-27 00:29  会写代码的厨子  阅读(108)  评论(0)    收藏  举报