Java 线程学习

Java 线程池与 Kotlin 协程 高阶学习 在Java中正确关闭线程池,在Kotlin中使用合适的作用域防止内存泄漏。比如,如何用Java的线程池执行多个异步任务并处理结果,而Kotlin如何使用协程实现相同的逻辑,同时避免回调地狱,使代码更简洁。同时,实际应用场景的例子,比如网络请求或数据库操作的异步处理,会帮助我们更好地理解差异。最后,总结两者的优缺点,强调Kotlin协程在简化异步代码、减少回调嵌套、提升可读性方面的优势,同时指出在复杂线程管理或底层控制时Java线程池仍有其适用场景。 阅读详情

线程的七状态转换图:

堵塞的情况分三种:

  (一)、等待堵塞:执行的线程执行wait()方法,JVM会把该线程放入等待池中。

  (二)、同步堵塞:执行的线程在获取对象的同步锁时,若该同步锁被别的线程占用。则JVM会把该线程放入锁池中。

  (三)、其它堵塞:执行的线程执行sleep()或join()方法,或者发出了I/O请求时。JVM会把该线程置为堵塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完成时。线程又一次转入就绪状态。

与课本中的七状态转换图相比,图中的可运行状态应该相当于活动就绪状态,其中的池锁状态活动阻塞状态,阻塞状态应该相当于静止就绪,处于静止就绪状态的程序是被挂起的,表示暂不接受调度。等待队列应该相当于静止阻塞,需要被外部程序唤起才能进入活动阻塞。

当进入运行状态后,会出现:

1.当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待OS分配时间片。

join的意思是使得放弃当前线程的执行,并返回对应的线程,例如:程序在main线程中调用t1线程的join方法,则main线程放弃cpu控制权,并返回t1线程继续执行直到线程t1执行完毕。所以结果是t1线程执行完后,才到主线程执行,相当于在main线程中同步t1线程,t1执行完了,main线程才有执行的机会

join方法的原理就是调用相应线程的wait方法进行等待操作的,例如A线程中调用了B线程的join方法,则相当于在A线程中调用了B线程的wait方法,当B线程执行完(或者到达等待时间),B线程会自动调用自身的notifyAll方法唤醒A线程,从而达到同步的目的。

2.线程调用了yield()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;

3.当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchroniza(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,既先到先得),一旦线程获得锁标记后,就转入可运行状态,等待OS分配CPU时间片;

 synchroniza 同步锁,保证一个临界资源同时只会被一个线程所访问。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题

4.当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁 池,等待获取锁标记

线程创建方式:

1.继承Thread 类,重写run方法,创建的线程调用start方法启动

2.实现Runnable接口,重写run方法,通过new Thread(继承Runnable接口的实例).start方法启动。本方法的原理是:thread对象调用start方法,start方法导致线程的run方法被调用,在线程的run方法中去调用Runnable实例的run方法

3.实现Callable接口,重写call 方法,call 方法有返回值。通过newThread(new FutureTask<>(new 实现Callable 接口的类)).start方法启动。FutureTask<Integer>是一个包装器,它通过接受Callable<Integer>来创建,它同时实现了Future和Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。

4.通过线程池创建

线程关键字

synchronized :

1.能够针对临界资源进行加锁,保证一个临界资源同时只会被一个线程锁访问。防止一个临界资源同时被两个线程修改出现脏读。

2. 用法:

1.可以修饰代码块,被修饰的代码块称为同步语句块,作用对象是调用这个代码块的对象。

2.修饰一个方法,被修饰的方法称为同步方法,作用范围是整个方法,作用对象是调用这个方法的对象。

3.修饰一个静态方法,作用范围是整个静态方法,作用对象是这个类的所有对象。

4.修饰一个类,作用对象是整个类的所有对象。

Java线程常用关键字介绍

Synchronized 用法举例

 

Python爬虫获取Shopee店铺的所有商品? 通过上述代码示例,我们可以轻松实现获取Shopee店铺所有商品信息的功能。Python爬虫不仅具有强大的功能和稳定性,还可以通过丰富的库支持实现高效的数据抓取和解析。希望这篇文章能为你提供一些启发和帮助。如果你对爬虫开发有更多兴趣,可以尝试探索更复杂的功能,如多线程爬取、数据可视化等。如果你在实践中遇到任何问题,欢迎随时交流和讨论。让我们一起用技术的力量,解锁更多可能! 阅读详情

相关推荐

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2211

Java线程深入学习

Java线程深入学习 ​ 上一篇博客讲了一下并发,但是没有达到自己的效果,所以这篇博客想从上一篇博客中的线程讲起,打算写一篇有着自己风格和能够让自己满意的博客。也是想深入了解一下线程的工作原理。 ​ 线程是程序中的执行线程。 Java虚拟机允许应用程序具有多个并发运行的执行线程。Java创建线程有两种方式(Java文档中这样说的,网上说应该还有一种,总共三种)一种是继承Thread类,一种是实现Runnable接口。下面先就第一种创建方法来说一下线程具体的流程。现在上代码。 package ThreadTr

qq_38533859的博客 167

docker安装fastdfs+nginx配置

docker安装fastdfs+nginx,实现图片或文件的上传与下载

weixin_47325126的博客 2193

进行java线程的学习

进行java线程的学习。 

雨中风铃 614

使用Linux安装yum报错 E: Unable to correct problems, you have held broken packages.

使用Linux安装yum报错 E: Unable to correct problems, you have held broken packages.

weixin_43205954的博客 2462

【Python Turtle合集】有趣好玩的代码当然要分享给大家啦~(皮卡丘、玫瑰花、小黄人......)

前言 🚀 作者 :“程序员梨子” 🚀 **文章简介 **:本篇文章主要是写了利用Turtle库绘制四种不一样的图案的小程序! 🚀 **文章源码免费获取 : 为了感谢每一个关注我的小可爱💓每篇文章的项目源码都是无 偿分享滴💓👇👇👇👇 点这里蓝色这行字体自取,需要什么源码记得说标题名字哈!私信我也可! 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 正文 今天给大家介绍一个好玩儿的库,嘻嘻! Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵

TZ45678的博客 3万+

Java线程学习

package work1; import java.awt.List; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.HashMap; impo...

qq_42265608的博客 160

面向RKNN平台的YOLOv11 Pose部署实战:模型转换、优化与端侧姿态估计推理

本文研究了YOLOv11 Pose模型在Rockchip RKNN平台上的部署方案。通过分析模型架构和关键技术,提出完整的转换流程,包括ONNX格式转换、检测头优化和量化配置。在RK3588硬件平台上实现了100 FPS的实时姿态检测,验证了该方案的可行性。研究主要贡献包括:1)提出YOLOv11 Pose到RKNN平台的完整转换方案;2)优化后处理算法;3)实现高效的边缘计算部署。实验结果表明,该方案能有效解决边缘设备计算资源受限的问题,为人机交互等应用场景提供了实用的技术方案。

m0_71589036的博客 613

如何学习Java多线程

如何学习Java多线程 最近一段时间,我对《Java并发编程实践》这本经典而又有些难懂的书籍,尝试用了一些简单有趣、通俗易懂的方式进行解读,现整理成GitBook(文末有链接),方便大家阅读。 为什么要解读这本书 因为这是一本经典却又难懂的书。 这本书的经典我想不必多讲了,几乎所有想学习Java并发的同学,都会被推荐去看这本书(虽然他们中的大多数在看了不到三分之一之后就放弃了),作为...

tzllxya的博客 262

在 SAP BTP 中玩转工厂日历 Maintain Factory Calendars 实战指南

工厂日历是企业关键的时间主数据,基于国家假日历定义工作日与非工作日,广泛应用于生产计划、采购交期、财务结账等业务场景。SAP系统通过三类应用(维护节假日、假日历和工厂日历)实现分层配置。工厂日历作为顶层配置,支持工作日模式设定和例外规则添加。在多系统架构中,工厂日历可通过集成场景同步,确保数据一致性。应用支持创建、编辑和查看功能,包含有效期设置、例外规则管理和多语言文本维护。合理设置工厂日历对业务运营至关重要,需注意命名规范和有效期选择,避免历史数据问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

weixin_46183247的博客 767

java线程池学习

java线程池学习

nuoshueihe的专栏 511

iOS应用突然无法从App Store获取到内购(IAP)产品列表的解决

问题现象 Apple开发中,在应用中嵌入内购(IAP)功能的小伙伴们可能会发现,吃着火锅唱着歌,突然App就无法获取到产品列表了,而且产品请求操作并不会返回任何错误。 此时检查发现,并没有对App的内购逻辑做任何改动。 那么,这是什么原因导致的呢? Let’s find out!???? 问题分析 1. 排除其它原因 首先,你先得排除不是你IAP内购逻辑变更或其他原因导致的。 在SKProductsRequestDelegat代理实现的productsRequest方法里下断点: func produc

享受开发,颠倒银河 6142

Java多线程学习

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

2301_82242204的博客 1002

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java学习笔记——多线程

总结:1.程序、进程和线程的区分:程序(program):为完成特定任务,用某种语言编写的`一组指令的集合`。即指一段静态的代码。进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。程序是静态的,进程是动态的。进程作为操作系统调度和分配资源的最小单位。线程(thread):进程可进一步细化为线程,是程序内部的一条执行路径线程.作为CPU调度和执行的最小单位2.线程调度策略分时调度:所有线程轮流使用`CPU`的使用权,并且平均分配每个线程占用CPU的时间。

qq_58956810的博客 1084

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java 线程池学习

Java 线程池学习

wanxiaotao12-126-com 137

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java多线程学习指南

Java 多线程学习指南

感谢阅读 1558

Java 线程 之深入学习

Java 线程 之深入学习(敲详细)

紫蝶侠的博客 178

java修炼之多线程学习心得

java修炼之多线程学习心得 java是少数几种支持“多线程”的开发语言之一。大多数的程序语言只能遵循运行单独的一个程序块,无法同时运行多个不同的程序块。java的“多线程”恰可以弥补这个缺陷,它可以让同一进程中的不同线程一起运行起来,而不再像别的成语言只能进行单一的线程运行。如此一来就可以让程序运行起来更加的顺畅了,同时也可以达到多个任务同时被处理,更加充分利用计算机的CPU资源。 1. 进程与...

qq_41910568的博客 630

Java多线程学习笔记

1.synchronized是关键字,Lock是接口;2.synchronized是隐式的加锁,lock是显式的加锁;3.synchronized可以作用于方法上,lock只能作用于方法块;4.synchronized底层采用的是objectMonitor,lock采用的AQS;5.synchronized是阻塞式加锁,lock是非阻塞式加锁支持可中断式加锁,支持超时时间的加锁;

2402_87028704的博客 712

写给Java程序员看的多线程学习指南

前言大家好,我是Guide哥!这是我的第二篇专门介绍如何去学习某个知识点的文章。相比于写技术文章来说,写这种这种类型的文章实际花费的时间可能会稍微少一点。但是,这种学习指南形式的文章,...

singwhatiwanna 588

Java线程池详解学习:ThreadPoolExecutor

Java线程池详解学习:ThreadPoolExecutor

个人博客 511

《java学习笔记》之多线程初步

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer!越努力越幸运!金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。

2401_84048034的博客 1064

Java学习day22:进程和线程、并发并行、线程创建方式(知识点详解)

Java学习day22:进程线程、并发并行、线程创建方式 一、进程和线程 1.什么是进程 是独立的运行程序,比如咱们电脑软件,你启动起来以后,他就是一个进程。qq idea 进程需要windows系统的分配。可以获取当前的系统的网卡,内存,显卡等

LF__plus的博客 1570

Java学习:多线程

线程的回顾学习,个人理解学习,专业理论性知识不强。

weixin_48800764的博客 1825

java多线程学习思维导图

本思维导图参考高洪岩所著《Java多线程编程核心技术》

浅浅的i的博客 2970
上一篇: oozie 用法说明
下一篇: java 爬虫之使用jsoup爬取页面
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值