美文网首页
多线程常用方法1(命名和取得)

多线程常用方法1(命名和取得)

作者: 秋笙fine | 来源:发表于2019-01-24 11:59 被阅读0次

多线程每一次运行都是不同的运行结果,因为它会根据自己的情况进行资源抢占(除非加锁)。要区分每一个线程,那么必须依靠线程的名字。对于线程名字,一般而言会在其启动之前进行定义,不建议对已经启动的线程更改名称/设置不同线程重名。

如过要想进行线程名称的操作,可以使用Thread类如下方法。

1.构造方法:

public Thread(Runnable target,String name)

2.普通方法(并且无法被子类覆写)

public final void setName(String name)

与之对应的getName()取得名字。

对于线程名字操作会出现一个问题,这些方法属于Thread类,Runnable接口子类(MyThread类)无法取得线程名字,能取得的只有当前正在执行的线程名。

Thread类中有一个currentThread的静态方法可供调用,结果这个问题

public static Thread currentThread();

范例:观察线程的命名:

package TestDemo;



class MyThread implements Runnable{//Runnable接口子类,也是线程公有对象,其实例化对象在堆中
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }   
}

public class TestDemo{
    
    public static void main(String[] args)throws Exception{
        MyThread mt=new MyThread();
    
        new Thread(mt).start();
        new Thread(mt).start();
        new Thread(mt).start();
    }
    
}
image.png

如果在实例化Thread类对象的时候没有为其设置名字,会自动命名,用以保证线程对象名字不重复。
范例:使用构造方法命名:

package TestDemo;



class MyThread implements Runnable{//Runnable接口子类,也是线程公有对象,其实例化对象在堆中
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }   
}

public class TestDemo{
    
    public static void main(String[] args)throws Exception{
        MyThread mt=new MyThread();
    
        new Thread(mt,"Thread A").start();
        new Thread(mt).start();
        new Thread(mt,"Thread B").start();
        new Thread(mt).start();
        new Thread(mt).start();
    }
    
}

结果:


image.png

上面讲完了,我们来点拓展:

package TestDemo;



class MyThread implements Runnable{//Runnable接口子类,也是线程公有对象,其实例化对象在堆中
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }   
}

public class TestDemo{
    
    public static void main(String[] args)throws Exception{
        MyThread mt=new MyThread();
    
        new Thread(mt,"Thread A").start();
        mt.run();
    }
    
}
image.png

主方法就是一个线程(main线程 主线程)所有在main方法里创建的线程都可以视作子线程(new Thread()构造生成),这在Android开发中很常见,因为要开辟子线程进行一些耗时操作如网络请求等)

通过以上代码可以发现,线程实际上一直都存在(主方法就是主线程),可是进程去哪里了呢,其实每次使用java命令去解释一个程序类/使用IDE编译源代码时候,对于操作系统而言都想与开辟了一个新进程,而main线程只是新进程中的一个子线程而已。

提问:每一个JVM进程启动的时候至少启动几个线程?
main线程:程序的主要执行,以及启动子线程
gc线程:负责垃圾收集

相关文章

  • 多线程常用方法1(命名和取得)

    多线程每一次运行都是不同的运行结果,因为它会根据自己的情况进行资源抢占(除非加锁)。要区分每一个线程,那么必须依靠...

  • 多线程、Runtime 类

    多线程的主要的操作方法都在 Thread 类中 线程的命名和取得 由于多线程的运行状态是不确定的,所以对于多线程的...

  • 线程常用操作方法

      多线程的主要方法都在Thread中定义了 线程的命名和取得   多线程的运行状态是不确定的,那么在程序的开发中...

  • 线程常用操作方法

    多线程的主要操作方法都在Thread类中定义了; 线程的命名和取得 多线程的运行状态是不确定的,那么在开发过程之中...

  • JavaScript 编码规范总结

    JavaScript 编码规范总结 1. 命名: 常用命名方法 (1) camel命名法,形如thisIsAnAp...

  • java线程&和各种奇奇怪怪的锁

    1、Java线程 一、Java多线程常用的两种实现方法 1、 继承Thread类 子类继承Thread类具备多线程...

  • 多线程设计模式阅读日记

    1.多线程的常用方法 wait(), notify(), notifyAll(), 方法都必须在同步代码中,而Th...

  • Java多线程常用操作方法

    线程的命名和取得 Thread类中的线程名称操作方法 构造方法: public Thread(Runnable t...

  • 多线程学习笔记目录

    基础 如何开启多线程 多线程常用的方法 线程的状态 线程中断 synchronized关键字 wait和notif...

  • vue学习笔记--API URI设计规范和javaScript开

    本文目录http常用方法简单的URI命名规则级联资源API URI命名规则其他命名规则变量命名规则函数命名规则常量...

网友评论

      本文标题:多线程常用方法1(命名和取得)

      本文链接:https://www.haomeiwen.com/subject/xcdyjqtx.html