多线程之活锁(了解一下就可以了)

Posted 姿势帝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程之活锁(了解一下就可以了)相关的知识,希望对你有一定的参考价值。

1.背景

活锁的概念:

活锁出现在两个线程互相改变对方的结束条件,最后谁也无法结束

也叫着死循环,在这里作为一个概念理解

2.代码

package com.ldp.demo01;

import com.common.MyThreadUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * @author 姿势帝-博客园
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 02/02 8:29
 * @description <p>
 * 活锁的概念:
 * 活锁出现在两个线程互相改变对方的结束条件,最后谁也无法结束
 * 也叫着死循环,在这里作为一个概念理解
 * </p>
 */
@Slf4j
public class Test11LiveLock 
    static int n = 100;

    /**
     * 案例:
     * 假设n=100,
     * 线程t1对n做n++直到n>=200结束;
     * 线程t2对n做n--直到n<=0结束;
     * 如果只看线程t1或者只看线程t2是没有问题的,
     * 但是如果两个线程同时工作,那么就有可能永远执行不完即【活锁】现象。
     *
     * @param args
     */
    public static void main(String[] args) 
        Thread t1 = new Thread(() -> 
            while (n < 200) 
                log.info("n=", n);
                MyThreadUtil.sleep(1);
                n++;
            
        , "t1");
        Thread t2 = new Thread(() -> 
            while (n > 0) 
                log.info("n=", n);
                MyThreadUtil.sleep(1);
                n--;
            
        , "t2");
        t1.start();
        t2.start();
    

 

完美

以上是关于多线程之活锁(了解一下就可以了)的主要内容,如果未能解决你的问题,请参考以下文章

关于线程死锁,活锁和饥饿问题

java多线程中的死锁活锁饥饿无锁都是什么鬼?

Java线程的死锁和活锁

多线程编程的锁问题解析(锁竞争死锁活锁及Date Race等)

线程池你真不来了解一下吗?

java多线程系列-死锁与活锁的区别,死锁与饥饿的区别