有什么问题可以加我的微信奥,我的微信是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。
获取当前的线程是很重要的一个操作,特别是我们在不知道当前线程是哪个线程的时候。