多线程入门基础#Thread类的构造方法与常用方法

本文介绍了Java线程的基础概念,包括线程的创建方法、线程的优先级设置、线程的生命周期状态判断以及线程的暂停和加入等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念

线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:

  • 调用了 Runtime **类的 exit方法,并且安全管理器允许退出操作发生。
  • 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。

创建新执行线程有两种方法。一种方法是将 类声明为Thread 的子类。该子类应重写 Thread 类的 run 方法。创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。

​ -------来源于JDK1.6API

1.java.lang.Thread类的方法

✔Thread类的构造方法

✔Thread类的常用方法

2.Thread类的构造方法

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

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

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

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

3.Thread类的常用方法

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

②public String getName() :获取当前线程名称。/public String setName() :设置当前线程名称。

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

④public final boolean isAlive():测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。

⑤public final int getPriority() :返回线程优先级 。

⑥public final void setPriority(int newPriority) :改变线程的优先级。

通常推荐设置Thread类的三个优先级常量:

☞MAX_PRIORITY(10):最高优先级 。

☞MIN _PRIORITY (1):最低优先级。

☞NORM_PRIORITY (5):普通优先级,默认情况下main线程具有普通优先级

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

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

⑨public static void yield():yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,希望优先级与当前线程相同或更高的其他线程能够获得执行机会,但是这个不能保证,完全有可能的情况是,当某个线程调用了yield方法暂停之后,线程调度器又将其调度出来重新执行。【加塞】

⑩void join() :等待该线程终止。

void join(long millis) :等待该线程终止的时间最长为 millis 毫秒。如果millis时间到,将不再等待。

void join(long millis, int nanos) :等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。

⑪public final void stop():强迫线程停止执行。 该方法具有固有的不安全性,已经标记为@Deprecated不建议再使用,那么我们就需要通过其他方式来停止线程了,其中一种方式是使用变量的值的变化来控制线程是否结束。

4.代码演示
▲①如何给线程取名字?

☀继承Thread类方式获取当前线程名称

public class ThreadTest {
	public static void main(String[] args) {
		MyThread my1 = new MyThread();
		//【知识点一】:public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。
		my1.start();

		MyThread my2 = new MyThread("大侠半夜战斗线程");
		my2.start();
	}
}
class MyThread extends Thread {
	public MyThread() {
		super();
	}
	public MyThread(String name) {
		super(name);
	}
	// 必须重写run()
	@Override
	public void run() {
		//线程开始执行; Java虚拟机调用此线程的run方法。
		//【知识点二】:public String getName() :获取当前线程名称。
		System.out.println(getName());
	}
}

打印结果:
Thread-0
大侠半夜战斗线程

☀实现Runnable接口方式获取当前线程名称

package com.daxia.case2;
public class RunnableTest {
	public static void main(String[] args) {
		// 【知识点一】(构造方法)public Thread(Runnable target) :分配一个带有指定目标新的线程对象。
		Thread t1 = new Thread(new MyRunnable());
		t1.start();
		// 【知识点二】public Thread(Runnable target,String name)
		// 分配一个带有指定目标新的线程对象并指定名字。
		Thread t2 = new Thread(new MyRunnable(), "久而久之熊猫眼线程");
		t2.start();

	}

}

class MyRunnable implements Runnable {

	@Override
	public void run() {
		// 【知识点三】public static Thread currentThread() :返回对当前正在执行的线程对象的引用。
		System.out.println(Thread.currentThread().getName());
	}

}

打印结果:

Thread-0
久而久之熊猫眼线程

▲②如何判断线程是活的状态?

在这里插入图片描述

打印结果

true
大侠半夜战斗线程
Thread-0

▲③如何判断和修改线程优先级?

在这里插入图片描述

优先级高的抢到CPU的概率高,但还是不能保证一定先执行,不能用业务逻辑的先后顺序依赖优先级。

打印结果

主线程:main,优先级:10
自定义线程:大侠半夜战斗线程,优先级:3

▼注意如果优先级一定要在[1,10],否则会报错
在这里插入图片描述

▲④如何暂停当前线程(常用sleep())?
import org.junit.Test;
public class SleepTest {
	@Test
	public void test() throws InterruptedException{
		for (int i = 10; i >=1; i--) {
			System.out.println("倒计时:"+i);
			Thread.sleep(1000);//模拟倒计时的场景,每秒的间隔
		}
		System.out.println("下班啦!");
	}
}

打印结果:

倒计时:10
倒计时:9
倒计时:8
倒计时:7
倒计时:6
倒计时:5
倒计时:4
倒计时:3
倒计时:2
倒计时:1
下班啦!

▲⑤如何加塞线程?

在这里插入图片描述

(不限时)加塞后:

在这里插入图片描述

(限时)加塞后:

在这里插入图片描述
推荐阅读往期博文:

JavaSE高级应用#多线程入门基础#继承Thread类和实现Runnable接口-启动线程

#轻松一刻

在这里插入图片描述


☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!

☞本人博客:https://coding0110lin.blog.youkuaiyun.com/  欢迎转载,一起技术交流吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值