Java多线程4:Thread中的静态方法

一、Thread类中的静态方法

  Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可以知道,Thread类中的静态方法所操作的线程是“正在执行该静态方法的线程”,不一定是其所在位置的线程。为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作。下面来看一下Thread类中的静态方法:

  1、currentThread()

  currentThread()方法返回的是对当前正在执行的线程对象的引用。(Returns a reference to the currently executing thread object.)

  举例:

public class Thread01 extends Thread{

    static{
        System.out.println("静态代码块的打印:" + Thread.currentThread().getName());
    }

    public Thread01(){
        System.out.println("构造函数的打印:" +Thread.currentThread().getName());
    }

    @Override
    public void run() {
        System.out.println("run方法的打印:" + Thread.currentThread().getName());
    }
}
public class Test {
    public static void main(String[] args){
        Thread01 thread01 = new Thread01();
        thread01.start();
    }
}

  结果:

静态代码块的打印:main
构造函数的打印:main
run方法的打印:Thread-0

  可以看到,Thread01类中的三个相同的静态方法Thread.currentThread()所操作的不是同一个线程,虽然写在了Thread01内,但是静态代码块和构造函数中的静态方法是随着main线程而被调用的,run方法中的静态方法则是thread01线程调用的。把thread01.start()注释掉

public class Test {
    public static void main(String[] args){
        Thread01 thread01 = new Thread01();
//        thread01.start();
    }
}

  结果:

静态代码块的打印:main
构造函数的打印:main

  因为Thread01中的静态代码块和构造方法都是在main线程中被调用的,而run方法是thread01这个线程调用的,所以不一样。

  举例说明上篇说的"this.XXX()"和"Thread.currentThread().XXX()"的区别,this表示的线程是线程实例本身,后一种表示的线程是正在执行"Thread.currentThread.XXX()这块代码的线程"

public class Thread01 extends Thread{

    public Thread01(){
        System.out.println("构造函数中通过this调用:" + this.getName());
        System.out.println("构造函数中通过静态方法调用:" + Thread.currentThread().getName());
    }

    @Override
    public void run() {
        System.out.println("run方法中通过this调用:" + this.getName());
        System.out.println("run方法中通过静态方法调用:" + Thread.currentThread().getName());
    }
}
public class Test {
    public static void main(String[] args){
        Thread01 thread01 = new Thread01();
        thread01.start();
    }
}

  结果:

构造函数中通过this调用:Thread-0
构造函数中通过静态方法调用:main
run方法中通过this调用:Thread-0
run方法中通过静态方法调用:Thread-0

  同样的,把thread01.start()这一行注释掉以后

public class Test {
    public static void main(String[] args){
        Thread01 thread01 = new Thread01();
//        thread01.start();
    }
}

  结果:

构造函数中通过this调用:Thread-0
构造函数中通过静态方法调用:main

  所以,在Thread01里面通过Thread.currentThread得到的线程对象的引用不一定就是Thread01。

  2、

原文地址:https://www.cnblogs.com/zfyang2429/p/10520111.html

时间: 2024-12-13 09:56:30

Java多线程4:Thread中的静态方法的相关文章

Java多线程3:Thread中的静态方法

Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用.看一个重要的例子,然后得出结论: public class MyThread04 extends Thread { static { System.o

Java多线程01(Thread类、线程创建、线程池)

Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 1.1.2 单线程程序 - 从入口m

Thread中的静态方法

http://www.cnblogs.com/xrq730/p/4851344.html Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用.看一个重要的例子,然后得出结论: public class

Java多线程extends Thread和implements Runnable

大家都知道,要实现Java多线程的两种方式 a:是直接继承Thread类,b:是实现Runnable接口. 先上代码: a:是直接继承Thread类, public class ThreadDemo1 extends Thread {    public void run(){        //Thread.currentThread().getName() 和 this.getName()都可以用来获得线程的名称        System.out.println("线程的名称:"

java多线程创建-Thread,Runnable,callable和threadpool

java创建多线程的方式有许多种,这里简要做个梳理 1. 继承Thread类 继承java.lang.Thread类,创建本地多线程的类,重载run()方法,调用Thread的方法启动线程.示例代码如下: MyThread.java public class MyThread extends Thread { public void run(){ private int copy = 0; System.out.println("Thread id:" + Thread.current

Java 多线程(1)-Thread和Runnable

一提到Java多线程,首先想到的是Thread继承和Runnable的接口实现 Thread继承 public class MyThread extends Thread { public void run(){ int i = 0; System.out.println("--------------"+i++); } } Runnable接口实现 public class RunnableImpl implements Runnable { private long value =

Java 多线程之 Thread 类 和 Runnable 接口初步使用

Thread 类 Thread 类是在 JDK1.0 时就存在的, 在 Java 中接触的多线程开发基本上都会从这个类开始. Thread之定义线程类 使用 Thread 创建线程的方法很简单, Thread 是一个类, 在需要创建线程时, 我们只需要继承这个类, 并将 run() 方法进行重写即可. class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = min

Java 多线程查找文件中的内容

学过了操作系统,突然不知道多线程有什么用了. 看了一下百度,发现多线程,可以提升系统利用率 在系统进行IO操作的时候,CPU可以处理一些其他的东西,等IO读取到内存后,CPU再处理之前的操作. 总之可以在用户层面,可以提升效率,不过,有时候多线程设计不当,调试也很麻烦 今天尝试一下简单的查找文件后缀以txt 里的内容 demo SeachFileContent类,用来查询文件内容 package thread; import java.io.File; import java.io.IOExce

3.Thread中的静态方法

1.currentThread() public class Thread14 extends Thread{ static { System.out.println("静态块的打印:" + Thread.currentThread().getName()); } public Thread14() { System.out.println("构造方法的打印: " + Thread.currentThread().getName()); } public void