Java多线程Thread类了解和使用
2022/2/27 17:22:14
本文主要是介绍Java多线程Thread类了解和使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
创建线程的两种方式
- extends Thread 类
public class WelComeApp { public static void main(String[] args) { WelcomeThread thread = new WelcomeThread(); thread.start(); System.out.printf("1.Welcome, I'm %s.%n", Thread.currentThread().getName()); } public static class WelcomeThread extends Thread { @Override public void run() { System.out.printf("2.Welcome, I'm %s.%n", Thread.currentThread().getName()); } } }
- 实现 Runnable 接口
public class WelComeApp1 { public static void main(String[] args) { Thread thread = new Thread(() -> System.out.printf("2.Welcome, I'm %s.%n", Thread.currentThread().getName())); thread.start(); System.out.printf("1.Welcome, I'm %s.%n", Thread.currentThread().getName()); } }
注意事项
- 一个
Thread
实例调用过start
方法后,就不能再次调用,否则会出现java.lang.IllegalThreadStateException
异常信息
线程的生命周期状态
位于Thread#State
枚举列表出6个状态
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
-
NEW
刚刚创建好的线程对象,在
Start
方法之前 -
RUNNABLE
在它的内部有两个子状态、
ready,running
。线程一定是在被cpu调度到了,再一切准备完毕下才能开始工作。那么
READY
就是获取到CPU资源,准备就绪,可以执行。RUNNING
表示正在程序正在执行,对应到是java
代码里的run
方法。 -
BLOCKED
阻塞的, 通常我们说这个形容词都是在文件系统才用的到,这里也可以这么的认为,当前线程被一个I/O操作给阻塞住了,当前所占的cpu资源被分配去做其他事情了!等阻塞完后,再申请CPU资源回到
RUNABLE
状态。 -
WAITING
产生这些状态一搬在当前线程调用了
Object.wait()
、Thread.join()
调用
Object.notify()/Object.notifyAll()
回到RUNABLE -
TIMED_WAITING
WAINT状态是有等待某个其他线程结束,而当前状态是带有事件的概念在里面,我可以等,你有时间限制。
-
TERMINATED
这没啥好说的,当前线程结束。
多线程编程的好处与坏处
优势
- 大大的提高了系统的吞吐率
- 能充分的利用多核处理器资源
- 使用多线程比使用多进程更能节省资源
风险
- 线程安全的问题,同一个进程内的线程是共享进程资源,没有做好安全控制可能会导致数据混乱。
- 提高了编程难度,比如产生死锁,导致程序奔溃
- 可能会加重CPU负担,多个线程工作会导致上下文的切换,这也是一笔不小的开支。
参考
- 《Java多线程编程实战指南》第1章
这篇关于Java多线程Thread类了解和使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13怎么通过 JavaScript 或其他编程语言来实现监听屏幕高度变化功能?-icode9专业技术文章分享
- 2024-11-12聊聊我们那些年用过的表达式引擎组件
- 2024-11-12让项目数据更有说服力:五款必备数据可视化管理工具推荐
- 2024-11-12人到一定年纪,要学会远离多巴胺
- 2024-11-12解读:精益生产管理的目的是什么?如何操作?
- 2024-11-12Sku预研作业
- 2024-11-12文心一言API密钥:分步申请指南
- 2024-11-12初学者指南:轻松掌握后台交互
- 2024-11-12从零开始学习:封装基础知识详解
- 2024-11-12JSON对象入门教程:轻松掌握基础用法