首页 > 基础资料 博客日记
Java多线程 -Thread类的常用API
2024-02-21 21:56:58基础资料围观325次
Java资料网推荐Java多线程 -Thread类的常用API这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
线程常用API
Thread常用API说明:
Thread常用方法:获取线程名称getName()、设置名称setName()、获取当前线程对象currentThread()。
至于Thread类提供的诸如:yield、join、interrupt、不推荐的方法 stop 、守护线程、线程优先级等线程的控制方法,在开发中很少使用,这些方法会在高级篇以及后续需要用到的时候再为大家讲解。
思考: 当有很多线程在执行的时候, 我们怎么去区分这些线程呢?
例如下面代码, 我们创建了两个子线程, 但是两个子线程的打印内容是一样的, 这就导致于我们无法区分两个子线程
public class ThreadDemo {
public static void main(String[] args) {
// 创建第一个子线程
Thread t1 = new MyThread();
t1.start();
// 创建第二个子线程
Thread t2 = new MyThread();
t2.start();
}
}
// 创建线程对象
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("子线程输出: " + i);
}
}
}
此时需要使用Thread的常用方法:getName()、setName()、currentThread()等。
Thread设置和获取线程名称API:
方法名称 | 说明 |
---|---|
getName() | 获取当前线程的名称,默认线程名称是Thread-索引 |
setName(String name) | 将此线程的名称更改为指定的名称,通过构造器也可以设置线程名称 |
Thread类获取当前线程对象的API(可以通过这个API获取主线程对象):
此方法是Thread类的静态方法,可以直接使用Thread类调用。
这个方法是在哪个线程执行中调用的,就会得到哪个线程对象。
方法名称 | 说明 |
---|---|
static Thread currentThread() | 返回对当前正在执行的线程对象的引用 |
演示代码:
public class ThreadDemo {
public static void main(String[] args) {
Thread t1 = new MyThread();
// 获取子线程默认名称
System.out.println(t1.getName()); // Thread-0
// 设置线程名称
t1.setName("1号线程");
t1.start();
Thread t2 = new MyThread();
// 获取子线程默认名称
System.out.println(t2.getName()); // Thread-1
// 设置线程名称
t2.setName("2号线程");
t2.start();
// 获取当前线程对象(在这里也就是主线程)
Thread m = Thread.currentThread();
// 获取主线程默认名称
System.out.println(m.getName());
}
}
// 创建线程对象
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 拿到线程的名称用于区分
System.out.println(Thread.currentThread().getName() + "输出: " + i);
}
}
}
打印结果如下, 此时我们就可以区分多个子线程
Thread-0
Thread-1
main
1号线程输出: 0
1号线程输出: 1
1号线程输出: 2
2号线程输出: 0
1号线程输出: 3
1号线程输出: 4
2号线程输出: 1
2号线程输出: 2
2号线程输出: 3
2号线程输出: 4
Thread构造器是可以为线程取名字的:
我们可以在子类MyThread中调用父类Thread构造器, 就可以在创建对象时为线程设置名称, 不需要单独调用setName方法
方法名称 | 说明 |
---|---|
Thread(String name) | 可以为当前线程指定名称 |
Thread(Runnable target) | 封装Runnable对象成为线程对象 |
Thread(Runnable target ,String name ) | 封装Runnable对象成为线程对象,并指定线程名称 |
public class ThreadDemo {
public static void main(String[] args) {
// 创建线程时使用构造器设置名称
Thread t1 = new MyThread("1号线程");
t1.start();
Thread t2 = new MyThread("2号线程");
t2.start();
}
}
// 创建线程对象
class MyThread extends Thread {
public MyThread() {
}
// 调用父类构造器
public MyThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 拿到线程的名称用于区分
System.out.println(Thread.currentThread().getName() + "输出: " + i);
}
}
}
Thread类线程的休眠方法
方法名称 | 说明 |
---|---|
static void sleep(long time) | 让当前线程休眠指定的时间后再继续执行,单位为毫秒。 |
例如我们用主线程来演示, 当for循环中
i=3
时, 让主线程休眠三秒后, 再运行
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
System.out.println(i);
if (i == 3) {
Thread.sleep(3000);
}
}
}
文章来源:https://blog.csdn.net/m0_71485750/article/details/127655510
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: