当前位置: 首页 > news >正文

java 线程的那些事

什么是进程:

        你把它理解成一个软件

什么是线程:

        你把它理解成软件里面的一个功能,做的事情

什么是多线程:

        你把它理解成 软件里面的某一个功能,原先是一个人累死累活的在那里完成,现在好了,多个人一起完成,轻松又快活

什么是线程不安全:

        你把它理解成  软件里面的某一个功能,原先是一个人累死累活的在那里完成,虽然累,但是,数据不会出错,但是现在多个人一起来弄,结果,张三读取的数据是被李四修改过的数据,不是最新的数据,这样就是线程不安全的

什么是线程安全:

         你把它理解成  软件里面的某一个功能,原先是一个人累死累活的在那里完成,虽然累,但是,数据不会出错,但是现在多个人一起来弄,我让你们排好队,一个一个,有序的来操作数据,如果有人正在操作,我就让你在外面等着,必须等前面的人做完了自己的事情,你才能进去

什么是并行:

        你把它理解成  软件里面的某一个功能,同时进行多个任务

什么是并发:

        你把它理解成 软件里面的某一个功能,一下子来了很多请求,如果不处理,会导致程序宕机,卡死等

线程不安全和线程安全,

针对ArrayList   HashSet  HashMap 来进行举例

ArrayLists 线程不安全  ;  Vector、Collections 、CopyOnWriteArrayList 线程安全

HashSet  线程不安全   ; CopyOnWriteArraySet 线程安全

HashMap 线程不安全   ; ConcurrentHashMap 线程安全

下面用代码的方式,来进行模拟一下多线程,

需求:四位售票员进行卖票操作,加锁

package com.japhet.util;//卖票
class Ticket{//总票数private int ticket = 3000;//卖票逻辑递减public synchronized void seal(){if(ticket<=0){return;}ticket--;System.out.println(Thread.currentThread().getName()+"票还剩余"+ticket);}}public class ThreadUtils {public static void main(String[] args) {Ticket ticket = new Ticket();//售票员1进行卖票new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 4000; i++) {ticket.seal();}}},"AA").start();//售票员2进行卖票new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 4000; i++) {ticket.seal();}}},"BB").start();//售票员3进行卖票new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 4000; i++) {ticket.seal();}}},"CC").start();//售票员4进行卖票new Thread(()->{for (int i = 0; i < 4000; i++) {ticket.seal();}},"DD").start();}
}

下面用代码的方式,来进行模拟一下线程之间的通讯,

需求:因为是多线程,当11线程抢到资源,执行完自己的程序之后,他是不知道下一次会是谁成功的抢到资源,那我可以进行设置谁能抢到资源 (通过 await 等待   signal 通知某个线程执行),这里就让11线程执行了就让22线程去执行,22线程执行了就让33线程去执行,33线程执行了,就让11线程执行,依次循环10次这个动作

package com.japhet.util;import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class Srouce{
//    线程标识private int temp = 1;//    锁private Lock lock =  new ReentrantLock();//    三个线程private Condition condition1 = lock.newCondition();private Condition condition2 = lock.newCondition();private Condition condition3 = lock.newCondition();public void test(){lock.lock();try {while (temp!=1){//防止虚假唤醒,所以得用while循环condition1.await();}System.out.println("线程1111进来了");temp = 2;//修改标识,condition2.signal();//通知线程2去干活}catch (Exception e){e.printStackTrace();}finally {lock.unlock();}}public void test2(){lock.lock();try {while (temp!=2){//防止虚假唤醒,所以得用while循环condition2.await();}System.out.println("线程2222进来了");temp = 3;//修改标识,condition3.signal();//通知线程2去干活}catch (Exception e){e.printStackTrace();}finally {lock.unlock();}}public void test3(){lock.lock();try {while (temp!=3){//防止虚假唤醒,所以得用while循环condition3.await();}System.out.println("线程3333进来了");temp = 1;//修改标识,condition1.signal();//通知线程2去干活}catch (Exception e){e.printStackTrace();}finally {lock.unlock();}}
}public class ThreadUtils2 {public static void main(String[] args) {Srouce srouce = new Srouce();new Thread(()->{for (int i = 0; i < 10; i++) {srouce.test();}},"11").start();new Thread(()->{for (int i = 0; i < 10; i++) {srouce.test2();}},"22").start();new Thread(()->{for (int i = 0; i < 10; i++) {srouce.test3();}},"33").start();}}

http://www.lryc.cn/news/17992.html

相关文章:

  • 如何利用 Python 进行客户分群分析(附源码)
  • D1s RDC2022纪念版开发板开箱评测及点屏教程
  • 了解一下TCP/IP协议族
  • 【第十九部分】存储过程与存储函数
  • 字节序
  • PDF文件怎么转图片格式?转换有技巧
  • 筑基七层 —— 数据在内存中的存储?拿来吧你
  • Typecho COS插件实现网站静态资源存储到COS,降低本地存储负载
  • 2月23号作业
  • 因果推断方法(一)合成控制
  • 数据结构第12周 :( 有向无环图的拓扑排序 + 拓扑排序和关键路径 + 确定比赛名次 + 割点 )
  • Linux安装docker(无网)
  • 解决JNI操作内核节点出现写操作失败的问题
  • 纵然是在产业互联网的时代业已来临的大背景下,人们对于它的认识依然是短浅的
  • 干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)
  • ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境
  • ASP.NET Core MVC 项目 AOP之Authorization
  • 智能新冠疫苗接种助手管理系统
  • Python+Selenium4元素交互1_web自动化(5)
  • 2023双非计算机硕士应战秋招算法岗之深度学习基础知识
  • Python opencv进行矩形识别
  • 网安入门必备的12个kali Linux工具
  • 【测试面试】头条大厂,测试开发岗真实一面。你能抵得住吗?
  • 分享app的测试技巧
  • HTML 基础【快速掌握知识点】
  • SpringBoot入门(二)
  • 大数据|大数据基础(概念向)
  • 若依配置教程(九)若依前后端分离版部署到服务器Nginx(Windows版)
  • 【仔细理解】计算机视觉基础1——特征提取之Harris角点
  • Elasticsearch7.8.0版本进阶——近实时搜索