zoukankan      html  css  js  c++  java
  • 线程创建方式

    创建线程的两种方式

    一)继承Thread类,重写run方法

     1 package thread;
     2 
     3 public class cat {
     4     public static void main(String[] args) {
     5         Thr cat1 = new Thr();
     6         // 主线程在开启这个线程之后,并不会阻塞在这里,而是会继续向下执行
     7         cat1.start(); // 思考线程开启为什么是start而不是run方法
     8         for (int i = 0; i < 10 ;  i++) {
     9             System.out.println("mian线程执行");
    10             try {
    11                 Thread.sleep(1000);
    12             } catch (InterruptedException e) {
    13                 e.printStackTrace();
    14             }
    15         }
    16     }
    17 }
    18 // 继承Thread之后,Thr类就可以看作一个线程
    19 class Thr extends Thread {
    20     int count = 0;
    21     @Override
    22     public void run() {
    23         while (true) {
    24             System.out.println("干就完了" + "数量为" + (++count));
    25             try {
    26                 Thread.sleep(1000);
    27             } catch (InterruptedException e) {
    28                 e.printStackTrace();
    29             }
    30             if (count == 80) {
    31                 break;
    32             }
    33         }
    34     }
    35 }

     程序中线程分析:

    疑问解答: 为什么不是run而是start?

    此时的线程名为main,为串行化,而不是多线程了

     源码解读:

    1)

     

     2)

    真正实现多线程的是start0方法,是本地方法,底层是c/c++实现的

     

    二)实现Runnable接口,重写run方法

      因为java是单继承的,加入现在A类继承了B类,但是想把A类当成线程来使用,此时就不能继承Thread类了。这个时候,该Runnable接口上场表演了。这里不能再用start( )去开启线程了。这里底层使用了设计模式【代理模式】

    代理模式:

    静态代理开启线程

  • 相关阅读:
    vue笔记-inheritAttrs及$attr表示含义(一)
    Springboot项目使用junit-test(@Test)报错原因汇总
    @Configuration的使用
    Spring-RabbitMQ实现商品的同步(后台系统)
    RabbitMQ持久化和非持久化
    spring-AMQP-RabbitMQ
    RabbitMQ的5种模式
    RabbitMQ消息队列+安装+工具介绍
    Mina整体体系结构分析
    Mina入门级客户端程序实现telnet程序
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14806561.html
Copyright © 2011-2022 走看看