java之Thread类详细分析(全)

前言

Thread是程序中的执行线程
jvm并发地运行多个执行线程

1. 属性值

通过查看Thread源码,是继承Runnable接口的实现类
无论使用Runnable还是Thread,都会new Thread,然后执行run方法
通过这里也可以知道创建新执行的线程有两种方法

  1. 声明为 Thread 的子类,重写 Thread 类的 run 方法。创建对象,开启线程。run方法相当于其他线程的main方法。
  2. 声明一个实现 Runnable 接口的类,实现run方法,创建对象,开启线程。
public class Thread implements Runnable {
    /* Make sure registerNatives is the first thing <clinit> does. */
    private static native void registerNatives();
    static {
        registerNatives();
    }

    private volatile String name;
    private int priority;

    /* Whether or not the thread is a daemon thread. */
    private boolean daemon = false;

    /* Interrupt state of the thread - read/written directly by JVM */
    private volatile boolean interrupted;

    /* Fields reserved for exclusive use by the JVM */
    private boolean stillborn = false;
    private long eetop;
     /* What will be run. */
    private Runnable target;

    /* The group of this thread */
    private ThreadGroup group;

    /* The context ClassLoader for this thread */
    private ClassLoader contextClassLoader;

    /* The inherited AccessControlContext of this thread */
    private AccessControlContext inheritedAccessControlContext;

    /* For autonumbering anonymous threads. */
    private static int threadInitNumber;

属性值比较多
主要常用的属性代表是

  • name为Thread的名字,通过Thread类的构造函数来指定线程名字
  • priority表示线程的优先级(1-10,越大的数字优先级越高,默认值为5)
  • daemon表示线程是否是守护线程
  • target表示要执行的任务

1.1 线程属性方法

用来得到线程IDgetId
得到线程名称getName
设置线程名称setName
获取线程优先级getPriority
设置线程优先级setPriority
设置线程属性,可为守护线程和判断线程setDaemon
判断是否是守护线程isDaemon

具体的用户线程和守护线程区别
可查看我之前的一篇文章补补细节
【操作系统】线程与进程的深入剖析(全)

2. 常用方法

常用的方法有start、run和sleep方法

  • start方法:使该线程开始执行,jvm开始调用run方法。在该过程中,会为相应的线程分配所需要的资源
  • run方法:该线程要执行的操作,不是用户自身调用,是start的启动后自动调用。如果继承Thread类必须重写run方法,在run方法中定义具体要执行的任务
  • sleep方法:指定毫秒数让当前正在执行的线程休眠,但sleep不会释放锁
    sleep(long millis) //参数为毫秒
    sleep(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒

3. 使用方法

1. 通过调用自带的线程

Thread mt = new Thread("新的线程!");

//开启新线程
mt.setDaemon();
mt.start();

//在主方法中执行for循环
for (int i = 0; i < 10; i++) {
	System.out.println("main线程!" + i);
}

结果如图所示

在这里插入图片描述
2.通过继承Thread,重写方法

public class MyThread extends Thread {

    //定义指定线程名称的构造方法
    public MyThread(String name) {
        //调用父类的String参数的构造方法,指定线程的名称
        super(name);
        }

        @Override

        public void run() {

            for (int i = 0; i < 10; i++) {

                System.out.println(getName()+":正在执行!"+i);

            }

        }
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值