辛星Java多线程教程第二篇:线程识别

有什么问题可以加我的微信奥,我的微信是xinxing0913,注明"Java多线程交流"就可以啦。

区分多线程的意义

在我们平时的工作中,我们的应用总是有多个线程在运用,有的是数据库连接池,有的是缓存连接池,有的是业务线程。
我们识别出来这些线程是很有必要的,比如我们收到了线程过多的报警,那么是哪些线程增加了呢?
一般来说,我们在使用多线程的时候,也会给多线程命名。
我们后面会介绍线程池,在我们使用线程池的时候,同一个线程池里的线程应该具有相似的名称,这方便我们更好的定位问题。

区分线程的方法

那么我们如何来区分出线程呢?通常来说有两种方法:
第一种方法是通过线程的id,我们直接通过getId()方法即可拿到当前的ID。
第二种方法是通过线程的name,即线程的名称,我们可以通过setName()来为线程设置一个名称,如果没有设置名称的话,系统会自动设置一个。

我们来看一个具体的范例吧:

package com.mengzhidu.java.thread.demo;


public class ThreadList {
    public static void main(String[] args) {
        Thread[]  threads = new Thread[5];
        for (int i = 0; i < 5; i++) {
            threads[i] = new Thread();
        }
        for (int i = 0; i < 2; i++) {
            threads[i].setName("名称" + i);
        }

        for (Thread thread : threads) {
            System.out.println("线程ID:" + thread.getId() + "  线程名称:" + thread.getName());
        }

    }
}

在上面的例子中,我们有一个五个线程的数组,我们为前两个线程手动设置了名字,其他的线程我们没有设置名称,但是系统会自动为其设置名称。
我们来看一下执行结果吧:
在这里插入图片描述

可以看到,这里的Thread-2、Thread-3、Thread-4都是系统自动命名的。

获取当前的线程

在多线程的运行环境中,我们还会想知道当前的线程具体是哪个线程,我们可以用Thread.currentThread()来获取当前的线程。
我们先来看一段代码:

package com.mengzhidu.java.thread.demo;

public class CurrentThread {
    public static void main(String[] args) {
        RandomThread[] threads = new RandomThread[5];
        for (int i = 0; i < 5; i++) {
            threads[i] = new RandomThread();
        }
        for (RandomThread thread: threads) {
            thread.start();
        }
        Thread thread = Thread.currentThread();
        System.out.println("线程ID:" + thread.getId() + " 线程名称:" + thread.getName());
    }
}

class RandomThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程ID:" + getId() + " 线程名称:" + getName());
    }
}

在这里插入图片描述
我们可以在main()方法中通过Thread.currentThread()来获取main()方法所在的线程,这个线程通常我们称之为主线程,它的线程名称为main。
获取当前的线程是很重要的一个操作,特别是我们在不知道当前线程是哪个线程的时候。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值