java 多线程:Thread类;Runnable接口
1,进程和线程的基本概念:
1.什么是进程:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。(百度百科)
进程其实就是我们计算机上正在运行的程序。
2.什么是线程:
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
3.什么是多线程:
(1),概念:通俗的来说,多线程就是指多个线程并发执行的情况。
(2),原理:
多线程是如何做到的:
CPU把一段时间划分为多个很小的时间片段,然后让每个线程获得这些片段的执行权限,由于CPU的速度非常快,所以给人的感觉就像是同时运行一样。现在的计算机,的确是可以做到同时运行的,为什么呢?因为现在的计算机大多数都是多核的。
2、java中多线程的使用:Thread
构造:
- new Thread()
启动一个新的线程:
- .start()
常用方法:
- Thread.currentThread().getName() //获取当前线程的名字
/** * @ClassName MyThreadExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/19. */ public class MyThreadExample { private static class MyFirstThread extends Thread{ //自己写个线程,重写run()方法 @Override public void run() { System.out.println("MyFirstThread运行中:名字是:" + Thread.currentThread().getName()); } } public static void main(String[] args) { MyFirstThread myFirstThread = new MyFirstThread(); myFirstThread.run();//在当前线程中调用run()方法;不会产生新的线程 myFirstThread.start(); System.out.println("main方法中运行的线程名字:" + Thread.currentThread().getName()); /** * 运行输出: * main方法中运行的线程名字:main * MyFirstThread运行中:名字是:Thread-0 */ } }
线程运行具有随机性:


可以看出每次运行顺序不一样
线程的运行具有随机性。为什么是这样?那我们来讲讲调用了start()方法之后,产生了什么:
- (1),调用start()之后,程序会通知我们的JVM,告诉jvm我已经准备好了,可以运行了。
- (2),Jvm异步的调用我们的线程对应的run()方法。
- (3),Jvm什么时候运行我们的run()方法,这个是程序员没法控制的(其实呢,还是可以相对的控制,这个之后讲,但是,你要做到绝对的控制它马上运行,还是不行)
- (4),start()方法的调用顺序,不代表线程的run()方法的运行顺序。
3、Thread实现了Runnable接口,通过实现Runnable接口的方式来实现一个线程
Thread 类实现了Runnable接口,该接口只有有一个抽象方法run()
Thread 类构造方法可以传入一个Runnable接口实现类来构造线程实例:
示例代码:
/** * @ClassName UseRunnableThread * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/19. */ public class UseRunnableThread { private static class MyRunnableThread implements Runnable { @Override public void run() { System.out.println("MyRunnableThread" + Thread.currentThread().getName()); } } public static void main(String[] args) { Thread thread = new Thread(new MyRunnableThread()); //lambda 表达式方式构造线程方法 Thread thread1 = new Thread(()->System.out.println("Lambda表达式构建的线程,匿名内部类对象:" + Thread.currentThread().getName()) ); thread.start(); thread1.start(); System.out.println("main方法运行的线程:" + Thread.currentThread().getName()); /** * 运行输出: * Lambda表达式构建的线程,匿名内部类对象:Thread-1 * MyRunnableThreadThread-0 * main方法运行的线程:main */ } }
分类:
Java
posted on 2021-04-19 16:32 zhangmingda 阅读(229) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-04-19 HTML标签一览