zoukankan      html  css  js  c++  java
  • Java线程: 第一章 走进Java世界中的线程

    1.1.1 线程的创建,启动和运行

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

      运行一个线程实际上就是让Java虚拟机执行该线程的run方法,从而使相应线程的业务逻辑处理代码得到执行。为此,我们先要启动线程,使用Thread类的start方法即可。启动一个线程的实质是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。因此,start方法的调用并不意味着相应线程已经开始执行,这个线程可能稍后才被运行,甚至也可能永远不被执行。

      Thread类的两个常用构造器是Thread()和Thread(Runnable target)。对应的创建线程也是两种方式。

     

    public class WelcomeApp extends Thread{
       //继承Thread类重写run方法
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Thread welcomeThread = new WelcomeApp();
            welcomeThread.start();
            System.out.printf("1.Welcme!It's %s.%n",Thread.currentThread().getName());
    
        }
        public void run() {
            System.out.printf("2.Welcme!It's %s.%n",Thread.currentThread().getName());
        }
    }
    public class WelcomeApp2 implements Runnable{
        //创建一个Runnable接口实例,将其作为参数传给Thread,重写run方法
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Thread wThread = new Thread(new WelcomeApp2());
            wThread.start();
            System.out.printf("1.Welcme!It's %s.%n",Thread.currentThread().getName());
        }
        
        public void run(){
            System.out.printf("2.Welcme!It's %s.%n",Thread.currentThread().getName());
        }
    }

    输出结果为

    1.Welcme!It's main.
    2.Welcme!It's Thread-0.

    或者

    2.Welcme!It's Thread-0.

    1.Welcme!It's main.

    我们不支持直接调用run方法,因为如果直接调用run方法,那么这个线程的run方法其实运行在当前线程中(比如在main中调用,那么就在main中)而不是在自身线程之中,违背了创建线程的初衷。

    1.1.2 Runnable接口

      Runnable接口只定义了一个run方法:

      

    public void run()

      Runnable接口可以被看做对任务进行的抽象,任务的处理逻辑就体现在run方法中。Thread类实际上是Runnable接口的一个实现类,Thread.run()源码:

    pubic void run(){
       if(target != null)
            target.run();          
    }   

    1.1.3 线程属性

        

    1.3.4 Thread类的常用方法

    1.2 线程的层次关系

      假设线程A所执行的代码创建了线程B,那么,习惯上我们称线程B为线程A的子线程,线程A为线程B的父线程。

      在Java中,一个线程的优先级默认为该线程的父线程的优先级。

  • 相关阅读:
    commonjs
    基于webpack的vue开发环境搭建
    vs工程配置eslint检测环境
    h5笔记
    NPM install -save 和 -save-dev 区别
    小的div在大的div中垂直居中
    css position absolute相对于父元素的设置方式
    Python的支持工具[0] -> 环境包管理工具[1] -> Anaconda
    Python的支持工具[0] -> 环境包管理工具[0] -> pip
    代码编辑器[0] -> Vim/gVim[2] -> Vim 的相关知识
  • 原文地址:https://www.cnblogs.com/tiandiou/p/9675179.html
Copyright © 2011-2022 走看看