zoukankan      html  css  js  c++  java
  • 线程创建的两种方法

    在java平台中创建一个线程就是创建一Thread类(或其子类)的实例。

    run()方法:线程的任务处理逻辑可以致在Thread类run方法中直接实现或者通过该方法进行调用,因此相当于线程任务处理逻辑的入口方法,他由java虚拟机在运行相应线程是直接调用,而不是由应用代码进行调用。

    线程启动:线程的启动调用start()方法,请求Java虚拟机运行相应的线程,而进程具体何时运行是线程调度器(Scheduler)决定的。因此start()方法调用结束并不意味着相应线程已经开始运行。

    创建线程的两种方法

    Thread类的两个常用构造器:Thread()和Thread(Runnable target),相应的创建线程方式有两种。

    • 第一种:定义Thread子类,在改子类中重写run方法并在该方法中直接实现线程的逻辑。
    • 第二种:创建一个java.land.Runable接口的实例,在Runble实例中实现任务逻辑,然后以该Runable接口的实例作为构造器参数直接创建(new)一个Thread类实例。

    继承Thread方式创建线程:

    //定义Thread子类方式创建线程
    public class WelcomeApp {
      public static void main(String[] args) {
        // 创建线程
        Thread welcomeThread = new WelcomeThread();
        // 启动线程
        welcomeThread.start();
        // 输出“当前线程”的线程名称
        System.out.printf("1.Welcome! I'm %s.%n", Thread.currentThread().getName());
      }
    }
    
    // 定义Thread类的子类
    class WelcomeThread extends Thread {
      // 在该方法中实现线程的任务处理逻辑
      @Override
      public void run() {
        System.out.printf("2.Welcome! I'm %s.%n", Thread.currentThread().getName());
      }
    }
    

    实现Runnable接口方式创建线程:

    public class WelcomeApp1 {
      public static void main(String[] args) {
        // 创建线程
        Thread welcomeThread = new Thread(new WelcomeTask());
    
        // 启动线程
        welcomeThread.start();
        // 输出“当前线程”的线程名称
        System.out.printf("1.Welcome! I'm %s.%n", Thread.currentThread().getName());
      }
    }
    
    class WelcomeTask implements Runnable {
      // 在该方法中实现线程的任务处理逻辑
      @Override
      public void run() {
        // 输出“当前线程”的线程名称
        System.out.printf("2.Welcome! I'm %s.%n", Thread.currentThread().getName());
      }
    }
    

    一旦线程run方法执行(由java虚拟机调研)结束,相应的线程也就结束。当然run方法执行结束包括:正常结束、抛出异常终止。运行结束的线程所占的资源会如同其他java对象一样被java虚拟机回收。

    线程属于一次性用品,不能重复调用,start方法只能调用一次,否则会抛出illegalThreadStateException

    两种创建线程方法区别:

    1. 基于继承技术,创建Thread的子类
    2. 已Runnable接口实例为构造器参数,直接通过new创建线程实例,是一种基于组合的技术。

    组合向相对于继承来说类的耦合性更低,更加灵活,所以优选组合技术。

  • 相关阅读:
    关于java 定时任务
    centos 安装mysql
    javamelody 使用
    spring boot单元测试(转)
    关于CSS中的PX值(像素)
    CSS各个浏览器Hack的写法
    RGB颜色二值化
    关于promise对象的笔记
    关于跨域的问题
    JavaScript笔记
  • 原文地址:https://www.cnblogs.com/sanzashu/p/11058630.html
Copyright © 2011-2022 走看看