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中,一个线程的优先级默认为该线程的父线程的优先级。

  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/tiandiou/p/9675179.html
Copyright © 2011-2022 走看看