• 002 线程的创建


    一 . 概述

    线程的创建由两种方式,其实本质上讲仅仅有一种.(在JUC包出现之后,出现了Callable等接口,但是本质上还是仅仅只有一种方式,只是表示的方式不同而已).

    [1]继承Thread,重写run()方法.

    [2]实现Runnable接口,重写run()方法.

    我们其实可以将实现Runnable方法作为一种策略模式的实现,那么run()方法其实就是线程的执行单元.


     二 .继承Thread创建线程

      @Test
        public void test() {
            new Thread() {
                public void run() {
                    for(;;)
                        System.out.println("running....");
                };
            }.start();
        }

    三 . 实现Runnable接口

    @Test
        public void test2() {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(;;)
                        System.out.println("running ... ");
                }
            }).start();
        }

    四 .比较

    实际上线程的创建方式只有一种,就是创建Thread对象,然后启动该线程,否则new状态的线程实际上并不是真正的线程.(当线程启动之后,JVM就会为线程分配一个TID,只有拥有了TID才会进入CPU线程调度的队列之中,此时才能称为是一个线程).

      那么,Runnable接口又是什么情况呢?

        其中的run()方法只是线程逻辑单元.

      我们可以理解为是一种策略模式的应用,我们创建的线程是在执行不用的算法(策略).

      注意 : 线程的启动是需要调用JNI代码的,也就是JVM分配了线程资源之后才能算得上是一个线程.

  • 相关阅读:
    Codeforces 601B. Lipshitz Sequence(单调栈)
    C++11正则表达式初探
    Codeforces 1051 D.Bicolorings(DP)
    数据库规范——学习小记
    2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)
    10.2路径
    10.1jihe
    8/9三角形
    8/9,集合的运算
    6.2收费
  • 原文地址:https://www.cnblogs.com/trekxu/p/8975009.html
Copyright © 2020-2023  润新知