学习Java多线程之线程定义、状态和属性:完整攻略
学习Java多线程之线程定义、状态和属性:完整攻略
1. 线程简介
在计算机的世界里,线程是操作系统能够进行运算调度的最小单位,是程序运行的最小单元。Java中线程是Thread类的实例,多线程的并发编程是Java开发中非常重要的一个方面。
2. 创建线程
Java创建线程有两种方式:继承Thread类和实现Runnable接口。本文以实现Runnable接口的方式进行说明。
实现Runnable接口步骤:
- 创建一个实现了Runnable接口的类;
- 实现Runnable接口中的run()方法;
- 创建一个Thread对象,并传入Runnable接口的实现类;
- 调用Thread对象的start()方法,开始执行。
示例代码1:
public class MyRunnable implements Runnable {
public void run() {
System.out.println("新线程执行了");
}
}
public class Test {
public static void main(String [] args) {
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();
System.out.println("主线程执行结束");
}
}
输出结果:
主线程执行结束
新线程执行了
3. 线程状态
线程在执行过程中会不断地改变状态,Java中线程状态共有6种。
- New(新创建):新创建线程对象,但还未调用start()方法。
- Runnable(可运行):已经在JVM中启动,尚未运行完成的线程。
- Blocked(阻塞):线程被暂时停止执行,通常是在等待某个资源或锁。
- Waiting(无限等待):线程无限等待特定时间或者其他线程调用该线程的notify()/notifyAll()方法才会被唤醒。
- Timed Waiting(限时等待):线程等待一定时间后才会被唤醒。
- Terminated(结束):线程已经执行完毕或者出现异常而结束。
4. 线程属性和方法
在创建线程之后,我们可以获取线程的属性和调用线程相关方法。
线程属性包括:
- Name(名称):线程名称;
- Priority(优先级):线程优先级;
- Daemon(守护线程):是否为守护线程,即该线程是否随JVM一起结束。
线程方法包括:
- start():启动线程;
- run():线程的主要方法;
- interrupt():打断线程;
- join():等待线程执行完毕;
- sleep():线程睡眠;
- yield():线程暂停等待更高优先级的线程执行。
示例代码2:
public class MyThread extends Thread {
public void run() {
System.out.println("线程名:" + getName());
System.out.println("线程优先级:" + getPriority());
System.out.println("是否为守护线程:" + isDaemon());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程状态:" + getState());
System.out.println("线程执行完毕");
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.setName("MyThread");
myThread.setPriority(Thread.MAX_PRIORITY);
myThread.setDaemon(true);
myThread.start();
try {
myThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread.yield();
System.out.println("主线程执行");
}
}
输出结果:
线程名:MyThread
线程优先级:10
是否为守护线程:true
线程状态:TERMINATED
线程执行完毕
主线程执行
5. 总结
学习Java多线程之线程定义、状态和属性简单来说就是大家熟知的“创建线程”,但是我们始终应该对多线程程序有一个全面的了解。这样才能写出高效、可维护、可扩展的Java代码。
沃梦达教程
本文标题为:学习Java多线程之线程定义、状态和属性
基础教程推荐
猜你喜欢
- Springboot使用SPI注册bean到spring容器的示例代码 2023-06-10
- SpringBoot入门教程详解 2023-01-29
- java – 是否可以在sql server上使用jdbc获取查询计划? 2023-11-10
- jsp页面中引用其他页面的简单方法 2023-08-01
- SpringBoot实现文件上传下载实时进度条功能(附源码) 2023-06-23
- JAVA简单实现MD5注册登录加密实例代码 2024-02-28
- Kotlin 标准函数和静态方法示例详解 2023-06-30
- Spring boot 运用策略模式实现避免多次使用if的操作代码 2023-04-23
- 关于SpringBoot的异常回滚和事务的使用详解 2023-07-14
- jsp 从web.xml读取连接数据库的参数 2024-02-26