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

原文地址:https://www.cnblogs.com/tiandiou/p/9675179.html