活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待。

活锁有可能自行解开,死锁则不能。

package com.what21.thread07;

public class LiveLockThreadTest {

/**

* @param args

*/

public static void main(String[] args) {

Person zhangsan = new Person("张三");

Person lisi = new Person("李四");

// 张三的朋友是李四

zhangsan.friend = lisi;

// 李四的朋友是张三

lisi.friend = zhangsan;

// 张三先鞠躬

zhangsan.bow();

lisi.start();

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

zhangsan.start();

}

}

package com.what21.thread07;

public class Person extends Thread {

// 朋友

public Person friend;

// 名字

private String name;

// 鞠躬

private boolean bow;

/**

* @param name

*/

public Person(String name) {

this.name = name;

}

/**

* 鞠躬

*/

public void bow() {

this.bow = true;

}

/**

* 完成鞠躬

*/

public void up() {

this.bow = false;

}

@Override

public void run() {

while (true) {

// 如果朋友在鞠躬

if (friend.bow) {

// 自己也得鞠躬

this.bow();

try {

System.out.println(this.name + " 正在鞠躬 ... ");

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// 一分钟后鞠躬完成

this.up();

} else {

try {

Thread.sleep(200);

} catch (InterruptedException e) {

e.printStackTrace();

}

if (friend.bow) {

this.bow();

try {

System.out.println(this.name + " 正在鞠躬 ... ");

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

this.up();

} else {

break;

}

}

}

}

}

java 活锁_Java线程活锁相关推荐

  1. java异常_Java线程池「异常处理」正确姿势:有病就得治

    假设我们有一个线程池,由于程序需要,我们向该线程池中提交了好多好多任务,但是 这些任务都没有对异常进行try catch处理,并且运行的时候都抛出了异常 .这会对线程池的运行带来什么影响? 正确答案是 ...

  2. java堆栈_java线程的堆栈跟踪之jstack篇

    该命令打印java线程的堆栈跟踪,可以得知哪些线程被阻塞或正等待,以便于查找如线程死锁的原因 用法: jstack [ option ] pid jstack [ option ] executabl ...

  3. future java 原理_Java线程池FutureTask实现原理详解

    前言 线程池可以并发执行多个任务,有些时候,我们可能想要跟踪任务的执行结果,甚至在一定时间内,如果任务没有执行完成,我们可能还想要取消任务的执行,为了支持这一特性,ThreadPoolExecutor ...

  4. JAVA 海啸_java线程总结

    首先要理解线程首先需要了解一些基本的东西,我们现在所使用的大多数操作系统都属于多任务,分时操作系统.正是由于这种操作系统的出现才有了多线程这个概念.我们使用的windows,linux就属于此列.什么 ...

  5. java 原子量_JAVA线程10 - 新特性:原子量

    一.原子量简介 原子量就是操作变量的操作是"原子的",该操作不可再分,因此是线程安全的. 原子量虽然可以保证单个变量在某一个操作过程的安全,但无法保证你整个代码块,或者整个程序的安 ...

  6. 线程java作用_java线程介绍(原创)

    文章讲解要点 1.线程创建几种方式 2.线程常见设置方法,包括优先级.优先级休眠.停止等 3.多线程间的数据交互与锁机制 4.项目源码下载 线程介绍.png 一.线程创建方式 常见的线程创建方法以下三 ...

  7. java实例_Java线程方式及实例

    简介 线程创建方式由继承Thread类,实现Runnable接口,实现Callable接口通过FutureTask包装,通过线程池来创建,所以本文主要介绍Java线程方式. 继承Thread类 Thr ...

  8. java看山不是山_java线程启动原理分析

    一.前言 不知道哪位古人说:人生三大境界.第一境界是:看山是山看水是水:第二境界是看山不是山看水不是水:第三境界:看山还是山看水还是水. 其实我想对于任何一门技术的学习都是这样. 形而上下者为之器,形 ...

  9. java new一个线程执行完后会自动销毁吗_Java基础总结,超级全的面试题

    1. static关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?是否可以在 static 环境中访问非static 变量? stat ...

最新文章

  1. CSS学习六:布局剖析
  2. CodeChef Ada Pawns
  3. 机器学习帮助WebRTC视频质量评价
  4. SAP CRM Opportunity订单的文档流Document Flow的一些变体variant
  5. halcon/c++接口基础 之 析构函数和Halcon算子
  6. 原python最简单的图形编程_Python(简单图形和文件处理)编程
  7. 用WSL安装Docker镜像
  8. Chrome json 插件 JSONView-for-Chrome
  9. 联想 M7400 pro Linux下 CUPS 驱动安装
  10. R语言求一行(列表、list)数据的平均数
  11. c语言输入坐标三角形周长面积,3.1.7计算三角形周长和面积
  12. javaScript实现抽奖大转盘(一)
  13. 大数据揭秘成都“堵车地图” 拥挤程度全国第9
  14. 一加7t人脸识别_一加7pro有人脸识别吗一加7和一加7pro的区别
  15. 多线程编程 ----- 四种同步方法
  16. Inception网络
  17. 基于ESP8266的微信门铃
  18. plsql-数据查询(二、条件查询)
  19. python 腐蚀膨胀_python实现图像膨胀和腐蚀算法
  20. 信息系统项目管理师教程(第3版)- 带书签目录

热门文章

  1. 电影《隐入尘烟》观后感
  2. 基础类型和引用类型的区别
  3. 2021.5.10 《致橡树》
  4. jQuery仿天猫京东商城楼层滚动跳转代码分享
  5. 针对多点触控浏览器进行的开发(转)
  6. 10.现代循环神经网络
  7. Linux笔记——SetUID,SetGID,黏着位权限
  8. css3常用属性之表现型
  9. 金蝶云之家CEO田荣举:企业级软件市场不是靠钱砸出来
  10. 微信域名拦截检测技术分享