- 博客(21)
- 收藏
- 关注
原创 带着问题理解Java并发
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致的。一个线程对共享变量的修改,另外一个线程能够立刻看到。可见性:CPU缓存引起。原子性:分时复用引起。
2024-01-31 21:30:34 801
原创 Java并发中的锁
非公平锁的优点是可以减少唤起线程的开销,整体的吞吐效率高,因为线程有几率不阻塞直接获得锁,CPU不必唤醒所有线程。即使等待队伍里有排队等待的人,但如果在上一个人刚打完水把锁还给管理员而且管理员还没有允许等待队伍里下一个人去打水时,刚好来了一个插队的人,这个插队的人是可以直接从管理员那里拿到锁去打水,不需要排队,原本排队等待的人只能继续等待。如果物理机器有多个处理器,能够让两个或以上的线程同时并行执行,我们就可以让后面那个请求锁的线程不放弃CPU的执行时间,看看持有锁的线程是否很快就会释放锁。
2024-01-31 21:11:51 883
原创 线程协作(生产者消费者模式)
若仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,知道仓库中的产品被消费者取走为止。若仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。假设仓库只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。并发协作模型“生产者/消费者模式”---->信号灯法。**·解决方式一:**管程法。**解决方式二:**信号灯法。应用场景:生产者消费者问题。
2024-01-24 21:48:58 353
原创 死锁的理解
样例:有两个化妆使用的口红和镜子资源,两个女生使用。构造死锁场景,小红拿到了口红,小白拿到了镜子。此时她们两个都想再拿对方的资源,但是都没有释放自己手中的资源导致死锁。多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有。解决方案:当需要拿其他人使用的共享资源时,先把自己手中的资源释放再去拿,避免死锁发生。时,就会发生死锁问题。
2024-01-22 22:46:35 366 1
原创 同步方法及同步块
结果还是数据有误,因为synchronized 锁的是该方法对应的对象的锁,但是此处操作修改的对象是account,而不是银行,因此导致出错。此处应该锁银行而不是this。二、使用synchronized将方法变为同步方法,实现锁,使用该方法的人会拿方法对应对象的锁。针对银行取钱场景,首先使用synchronized 尝试对方法进行上锁。我们可以使用synchronized 块进行锁。三、使用synchronized 块。
2024-01-22 22:13:17 375 1
原创 线程同步介绍
处理多线程问题时,多个线程访问同一个对象。这时候就需要线程同步,线程同步是一种等待机制,多个需要同时此对象的线程进入这个。由于同一个进程的多个线程共享同一块存储空间,再带来了方便的同时,也带来了访问冲突问题,为了保证数据在方法中的准确性,在访问时加入。,当一个线程获得对象的排它锁。3)若一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题。2)在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题。形成队列 ,等待前面线程使用完毕,下一个线程再使用。
2024-01-18 22:08:05 400 1
原创 守护线程介绍
当被守护线程结束后,虚拟机不用等待守护线程执行完毕。因此当被守护线程结束后,守护线程也会被结束。eg:后台记录操作日志、监控内存、垃圾回收等。2、虚拟机必须确保用户线程执行完毕。3、虚拟机不用等待守护线程执行完毕。1、线程分为用户线程和守护线程。
2024-01-15 23:36:49 336
原创 线程的状态
3、建议使用一个标志位进行终止变量,当flag = false时,则终止线程。1)Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞。1、不推荐使用jdk提供的stop和destroy方法(已废弃)让cpu重新调度,礼让不一定成功,看cpu心情。sleep(time)指定当前线程阻塞的毫秒数。sleep时间达到后线程进入就绪状态。让当前正在执行的线程暂停,但不阻塞。将线程从运行状态转为就绪状态。2、推荐让线程自己停止下来。四、线程强制执行Join。三、线程礼让Yield。
2024-01-14 22:50:06 404 1
原创 【线程的创建方式】
推荐使用实现Runnable接口,可以避免单继承的局限性,灵活方便,方便同一个对象被多个线程调用。由结果可知,当某一个线程对对象进行操作后,其他线程也操作了该对象,但是影响了对象数据的准确性。2)启动线程:执行线程需要丢入Runnable接口实现类,调用start方法。样例:实现Runnable接口,实现多线程之使用多线程同步下载网图。2)启动线程:传入目标对象+Thread对象.start()样例:继承Thread类实现多线程之使用多线程同步下载网图。注:线程不一定立即执行,是由cpu决定的。
2024-01-14 17:31:11 374 1
原创 【策略模式】
如果没有策略模式,一个策略家族有多个策略算法,一会要使用A策略,一会要使用B策略,怎么设计呢?多重条件语句不易维护,而且出错的概率大大增强。我们可以将每个if判断理解为一个策略,但是如果if else里面的逻辑不多,并且复用性很低,那就不要使用策略模式。一个打车软件,现在有三种计费模式给 用户 选择,1、拼车 2、快车 3、豪车这个时候用户就是对象,三种计费方式就是行为,可以根据不同的行为计算不同不通的费用。定义工厂类,负责创建实现策略接口的类,使用Map存放策略实现类,避免过多的if else逻辑。
2024-01-09 20:58:21 365 1
原创 【rabbitmq】(七)发布订阅模式
发布订阅模式,生产者通过交换机以广播的形式将消息发布出去,与交换机有binding关系的的队列接收到消息后,各个消费者消费其对应队列中的消息。1、fanout,是将接收到的所有消息广播到它知道的所有队列中。系统中默认有些exchange类型。交换机会将消息广播给与他有binging关系的队列,以工不同的消费者使用。一、fanout(发布订阅模式)
2023-12-24 18:57:58 518 1
原创 【rabbitmq】(六)交换机
第一个参数是交换机的名称,空字符串表示默认或者无名称交换机:消息能路由发送到队列中其实是有routingKey(bindingkey)绑定key指定的,如果它存在的话。binding其实是exchange和queue之间的桥梁,它告诉我们exchange和哪个队列进行了绑定关系,比如下图中,X与Q1和Q2进行了绑定。直接(direct),主题(topic),标题(headers),扇出(发布订阅类型)(fanout)创建一个工作队列,假设的是工作队列背后,每一个任务都恰好交付个一个消费者(工作进程)。
2023-12-24 17:22:33 335 1
原创 【rabbitmq】发布确认(五)
单个确认发布方式非常慢,与单个等待确认消息相比,先发布一批消息,然后一起确认可以极大地提高吞吐量,此方式缺点:当发生故障导致发布出现问题时,不知道是哪个消息出现了问题,必须将整个批处理保存在内存中,以记录重要的信息。后续的消息才能继续发布,waitForConfirms这个方法只有在消息被确认的时候才返回,若在指定的时间内这个消息没有被确认,将会抛出异常。RabbitMQ消息确认机制指的是在消息传递过程中,发送方发送消息后,接收方需要对消息进行确认,以确保消息被正确地接收和处理。剩余的就是未确认的。
2023-12-21 23:11:04 1254 1
原创 【Rabbitmq】持久化(四)
生产者发送消息的时候需要声明消息需要持久化。需要修改生产者代码,MessageProperties.PERSISTENT_TEXT_PLAIN。为了保障当RabbitMQ服务停掉以后消息生产者发送过来的消息不丢失,我们需要。默认情况下RabbitMQ退出或由于某种原因崩溃时,它忽视队列和消息。实现队列持久化,需要在声明队列的时候把durable参数设置为持久化。队列持久化后,就算rabbitmq重启了,该队列还是存在。
2023-12-18 22:36:11 392
原创 【rabbitMq】消息应答(三)
消费者完成一个任务可能需要一段时间,若一个消费者处理一个长的任务,处理到一半它突然挂掉了,由于RabbitMq一旦想=向消费者传递了一条消息,便立即将该消息标记为删除。启动生产者代码在控制台输入:aa,bb后将工作时间长的消费者关掉,此时bb消息会重新入队,被另一个正常的消费者消费,保证业务正常运行。为了保证消息在发送过程中不丢失,rabbitmq引入了消息应答机制,消费者在接收到消息并且处理该消息之后。,因为在该模式下,在消息接收之前,消费者一侧出现链接或者channl关闭,那么消息就会丢失。
2023-12-12 00:49:03 923
转载 WGS84地球坐标系转火星坐标系的Python代码实现
WGS84地球坐标系转火星坐标系的Python代码实现转换算法:from __future__ import divisionfrom math import pi, sqrt, sin, cos# a python binding of https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936# Kr...
2018-11-22 09:08:58 1622
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人