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 返回值类型 方法名称(形参列表){

//代码(原子操作)

}

相关推荐
garmin Chen7 分钟前
从 Transformer 到 Agent:大模型技术全景解析
java·人工智能·python·深度学习·transformer
愚公移码12 分钟前
蓝凌EKP18产品:流程引擎技术篇之流程核心概念模型
java·人工智能·流程引擎·蓝凌
Full Stack Developme19 分钟前
Apache Tika 教程
java·开发语言·python·apache
鹅城剑仙33 分钟前
Java线程池完全指南
java
李白的天不白36 分钟前
SmartAdmin(基于 Spring Boot 框架)中配置跨域请求 VUE3 设置请求头
java·前端
橙子进阶之路37 分钟前
Java线程(CompletableFuture)
java·开发语言
鹅城剑仙1 小时前
Java CompletableFuture 异步编程完全指南
java
2601_961875241 小时前
法考备考计划表|学习计划|资料已整理
java·开发语言·学习·eclipse·tomcat·c#·hibernate
重生之我是Java开发战士1 小时前
【Java SE】多线程(三):单例模式,阻塞队列,线程池与定时器
java·javascript·单例模式
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第115题】【并发篇】第15题:说一下悲观锁和乐观锁的区别?
java·开发语言·面试