当前位置: 首页 > news >正文

Thread类的构造方法及常用方法

API中java.lang.Thread类定义了有关线程的一些方法,具体如下:

构造方法

public Thread():分配一个新的线程对象。

public Thread(String name):分配一个指定名字的新的线程对象。

public Thread(Runable target):分配一个带有制定目标新的线程对象。

public Thread(Runable target,String name):分配一个带有指定目标新的线程对象并指定名字。

常用方法

1.public String getName():获取当前线程名称。

// 定义一个Thread子类
public class MyThread2 extends Thread{

    // 重写Thread类中的run方法,设置线程任务
    @Override
    public void run() {
        // super.run();
        // 获取线程名称
        System.out.println(getName());
    }
}
/*
线程名称:
    主线程:main
    新线程:Thread-0,Thread-1,Thread-2
 */
public class Demo11ThreadName {
    public static void main(String[] args) {
        // 创建一个Thread子类对象
        MyThread2 mt = new MyThread2();
        // 调用start方法开启新线程,执行run方法
        mt.start();
        // 匿名类
        new MyThread2().start();
    }
}

运行截图:

2.public static Thread currentThread():返回对当前正在执行的线程对象的引用。

然后可以用线程中的方法getName来获取线程的名称

@Override
public void run() {
    // 返回对当前正在执行的线程对象的引用
    // 返回值:线程
    Thread td = Thread.currentThread();
    System.out.println(td);
    String name = td.getName();
    System.out.println(name);
}
public static void main(String[] args) {
    // 创建一个Thread子类对象
    MyThread2 mt = new MyThread2();
    // 调用start方法开启新线程,执行run方法
    mt.start();
    // 匿名类
    new MyThread2().start();
}

运行截图:

// 获取主线程的名称
// 只有这一个方法,因为主方法所在的类并没有继承Thread类
// 不能直接调用属于Thread类的getName方法
// 而是调用Thread类的静态方法获取当前线程的以用,然后用线程的getName方法获取名称
Thread.currentThread().getName();

3.public void setName():设置线程名称。

/*
设置线程的名称(两种方式):
1.使用Thread类中的方法setName(名字)
2.创建一个带有参数的构造方式,参数传递线程的名称;调用父类的带参构造方法,
把线程名称传递给父类i,让父类(Thread)给子类起一个名字。
注意区分,被赋值线程对象地址值的变量名(对象名)并不是线程的名称
 */
public class MyThread3 extends Thread{
    // 重写run方法
    @Override
    public void run() {
        //super.run();
        // 获取当前线程名称
        System.out.println(Thread.currentThread().getName());
    }

    public MyThread3() {
    }

    public MyThread3(String name) {
        // 调用父类的带参构造方法,
        //把线程名称传递给父类
        super(name);
    }
}
public static void main(String[] args) {
    // 开启多线程
    MyThread3 mt = new MyThread3();
    // 给线程设置名称
    mt.setName("线程1");
    // 调用start方法开启新线程,执行run方法
    mt.start();

    // 多线程
    MyThread3 mt1 = new MyThread3("线程2");
    mt1.start();
}

运行截图:

注意区分:被赋值线程对象的地址值的变量名(对象名)并不是该线程的名称!

4.public void start():导致此线程程开始执行;Java虚拟机调用此线程的run方法。

5.public void run():此线程要执行的任务在此处定义代码。

6.public static void sleep(long millies):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。

public static void main(String[] args) {
    // 模拟秒表
    for (int i = 1; i < 60; i++) {
        System.out.println(i);
        // 一秒钟打印一次
        // 使用Thread类的静态方法sleep(long millies)方法
        // 让程序睡眠指定毫秒数*1000
        // 有异常,要么throws声明异常,交给JVM,要么try-catch捕捉异常,自行处理
        // 此处使用try-catch捕捉
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

相关文章:

  • 创建多线程的第二种方式--实现Runable接口
  • Thread和Runnable的区别和匿名内部类方式实现线程的创建
  • 线程安全
  • 数据结构基本概念和术语
  • 线程状态
  • Object类中wait带参方法和notifyAll方法
  • File类
  • 递归(斐波那契数列、类加、累乘、打印多级目录)
  • FileFilter过滤器
  • LeetCode两数之和
  • 稀疏数组
  • 队列
  • 单链表LinkedList的增删改查
  • 双向链表和环形链表(单向和双向)约瑟夫环实例
  • IO流概述+字节输出流
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • [译]如何构建服务器端web组件,为何要构建?
  • 【EOS】Cleos基础
  • 0x05 Python数据分析,Anaconda八斩刀
  • Docker: 容器互访的三种方式
  • Druid 在有赞的实践
  • java8 Stream Pipelines 浅析
  • PHP 小技巧
  • React-flux杂记
  • vue:响应原理
  • 大主子表关联的性能优化方法
  • 高度不固定时垂直居中
  • 今年的LC3大会没了?
  • 如何优雅地使用 Sublime Text
  • 小程序button引导用户授权
  • 一个SAP顾问在美国的这些年
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 1.Ext JS 建立web开发工程
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • (1)虚拟机的安装与使用,linux系统安装
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)Java算法:二分查找
  • (转)菜鸟学数据库(三)——存储过程
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *p++,*(p++),*++p,(*p)++区别?
  • .CSS-hover 的解释
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CLR Hosting 简介
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET使用存储过程实现对数据库的增删改查
  • [ NOI 2001 ] 食物链
  • [145] 二叉树的后序遍历 js
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [BJDCTF2020]The mystery of ip
  • [BZOJ3223]文艺平衡树
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件