![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程
多线程
imaginationtrouble
这个作者很懒,什么都没留下…
展开
-
进程与线程理解
进程、线程、并发和并行理解原创 2024-01-24 22:40:12 · 761 阅读 · 1 评论 -
线程协作(生产者消费者模式)
若仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,知道仓库中的产品被消费者取走为止。若仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。假设仓库只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。并发协作模型“生产者/消费者模式”---->信号灯法。**·解决方式一:**管程法。**解决方式二:**信号灯法。应用场景:生产者消费者问题。原创 2024-01-24 21:48:58 · 338 阅读 · 0 评论 -
Lock锁理解
【代码】Lock锁理解。原创 2024-01-23 22:42:11 · 340 阅读 · 1 评论 -
死锁的理解
样例:有两个化妆使用的口红和镜子资源,两个女生使用。构造死锁场景,小红拿到了口红,小白拿到了镜子。此时她们两个都想再拿对方的资源,但是都没有释放自己手中的资源导致死锁。多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有。解决方案:当需要拿其他人使用的共享资源时,先把自己手中的资源释放再去拿,避免死锁发生。时,就会发生死锁问题。原创 2024-01-22 22:46:35 · 350 阅读 · 1 评论 -
同步方法及同步块
结果还是数据有误,因为synchronized 锁的是该方法对应的对象的锁,但是此处操作修改的对象是account,而不是银行,因此导致出错。此处应该锁银行而不是this。二、使用synchronized将方法变为同步方法,实现锁,使用该方法的人会拿方法对应对象的锁。针对银行取钱场景,首先使用synchronized 尝试对方法进行上锁。我们可以使用synchronized 块进行锁。三、使用synchronized 块。原创 2024-01-22 22:13:17 · 365 阅读 · 1 评论 -
线程不安全示例
车站有10张票,三个人同时去买票直至买完为止。同一个账户,两个人去取钱。原创 2024-01-18 22:58:17 · 356 阅读 · 1 评论 -
线程同步介绍
处理多线程问题时,多个线程访问同一个对象。这时候就需要线程同步,线程同步是一种等待机制,多个需要同时此对象的线程进入这个。由于同一个进程的多个线程共享同一块存储空间,再带来了方便的同时,也带来了访问冲突问题,为了保证数据在方法中的准确性,在访问时加入。,当一个线程获得对象的排它锁。3)若一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题。2)在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题。形成队列 ,等待前面线程使用完毕,下一个线程再使用。原创 2024-01-18 22:08:05 · 375 阅读 · 1 评论 -
守护线程介绍
当被守护线程结束后,虚拟机不用等待守护线程执行完毕。因此当被守护线程结束后,守护线程也会被结束。eg:后台记录操作日志、监控内存、垃圾回收等。2、虚拟机必须确保用户线程执行完毕。3、虚拟机不用等待守护线程执行完毕。1、线程分为用户线程和守护线程。原创 2024-01-15 23:36:49 · 322 阅读 · 0 评论 -
线程的状态
3、建议使用一个标志位进行终止变量,当flag = false时,则终止线程。1)Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞。1、不推荐使用jdk提供的stop和destroy方法(已废弃)让cpu重新调度,礼让不一定成功,看cpu心情。sleep(time)指定当前线程阻塞的毫秒数。sleep时间达到后线程进入就绪状态。让当前正在执行的线程暂停,但不阻塞。将线程从运行状态转为就绪状态。2、推荐让线程自己停止下来。四、线程强制执行Join。三、线程礼让Yield。原创 2024-01-14 22:50:06 · 391 阅读 · 1 评论 -
【线程的创建方式】
推荐使用实现Runnable接口,可以避免单继承的局限性,灵活方便,方便同一个对象被多个线程调用。由结果可知,当某一个线程对对象进行操作后,其他线程也操作了该对象,但是影响了对象数据的准确性。2)启动线程:执行线程需要丢入Runnable接口实现类,调用start方法。样例:实现Runnable接口,实现多线程之使用多线程同步下载网图。2)启动线程:传入目标对象+Thread对象.start()样例:继承Thread类实现多线程之使用多线程同步下载网图。注:线程不一定立即执行,是由cpu决定的。原创 2024-01-14 17:31:11 · 359 阅读 · 1 评论