Java--多线程

++多线程++

一.进程的概念:

1.进程:操作系统(OS)中,正在运行的一个应用程序

例如:

2.执行原理:宏观并行,微观串行

3.并发:一个CPU(采用时间片)同时执行多个任务,比如:秒杀活动

二.线程的概念:

1.线程:在一个进程中可以同时执行多个任务,每个任务就可以说是一个线程,线程是进程的执行单位,也称作轻量级进程

2.主线程:从main方法开始执行,以main方法的退出作为结束,即main函数是主线程的执行体

3.线程的组成部分:

①.CPU:操作系统(OS)分配时间片

②.数据:堆空间共享,栈空间独立

·每一个线程都有自己的栈空间

·多个线程可以共享同一个堆空间

③.程序代码

三.常用方法:

1.public void start()方法:

例:2.public void run()方法:

例:

3.public static void sleep(long m):让当前线程休眠m毫秒,从而进入计时等待状态,同时释放CPU资源

4.public final void join():允许其他线程加入到当前线程中(调用join方法语句所在的线程),让调用join方法的线程先执行,等待其他线程任务执行结束之后,再执行自身的任务

四.创建线程:

1.如何实现?

①.定义一个类实现java.lang.Runnable接口,同时实现接口中run方法

·实现Runnable接口的类为任务类,目标类

·将线程的任务定义在方法中

②.基于定义好的任务类,创建任务对象

·代表县城需要执行的任务,目标

③.基于java.lang.Thread类创建线程对象,并且将任务对象作为参数进行传递

·将任务交给线程对象,线程对象负责执行对应的任务

④.开启线程:

·调用start方法,jvm会自动运行run方法中的任务代码

2.创建线程的方式:

①.第一种方式:

·定义一个类实现java.lang.Runnable接口,同时实现run方法

·创建目标对象:

MyTask task = new MyTask();

·Thread t1= new Thread(task);

·开启线程:调用start方法

·t1.start();

例:②.第二种方式:

·定义子类继承Thread类,同时覆盖run方法

·创建线程对象:

MyThread t2 = new MyThread();

·开启线程:调用start方法

·t2.start();

例:

五.线程的状态:

1.初始状态:线性对象被创建,即为初始状态,只在堆中开辟内存,与常规对象无异

2.就绪状态:调用start()之后,进入就绪状态,等待OS选中,并分配时间片

3.运行状态:获取时间片之后,进入运行状态,如果时间片到期,则回到就绪状态

4.终止状态:主线程main()或独立线程run()结束,代表线程的任务结束,进入终止状态,并释放持有的时间片

六.线程同步:

1.同步代码块:对临界资源加锁

①.位置:定义在方法内部

②.语法:

synchronized(临界资源对象){

//代码(原子操作)

}

③.执行原理:线程只有获取临界资源对象的锁标记,才能执行同步代码块{}中的内容,并且必须将{}中的所有代码都执行完成,才释放该线程获取的临界资源对象的锁标记;如果没有获取到临界资源对象的锁标记(锁标记被其他线程占用),则线程进入阻塞状态,直至拿到临界资源对象的锁标记才能从阻塞状态结束,同时获取CPU时间片,执行{}中的内容

2.同步方法:

·修饰符 synchronized 返回值类型 方法名称(形参列表){

//代码(原子操作)

}

相关推荐
程序员黑豆6 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年6 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
小席是个热心肠7 小时前
AI相关的自我学习
java·人工智能·学习
数智化管理手记10 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_291410 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统11 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
0x5312 小时前
Java网络编程(二)
java·服务器·网络
Flittly12 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai12 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库