死锁:线程之间因条件相互竞争,导致线程都不能正常执行完,从而产生了死锁。

死锁的例子:

public class TestDeadLock implements Runnable {

public int flag = 1;

static Object o1 = new Object(), o2 = new Object();

@Override

public void run() {

System.out.println("flag = " + flag);

if (flag == 1){

synchronized (o1){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (o2){

System.out.println("1");

}

}

}

if (flag == 0){

synchronized (o2){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (o1){

System.out.println("0");

}

}

}

}

public static void main(String[] args) {

TestDeadLock td1 = new TestDeadLock();

TestDeadLock td2 = new TestDeadLock();

td1.flag = 1;

td2.flag = 0;

Thread t1 = new Thread(td1);

Thread t2 = new Thread(td2);

t1.start();

t2.start();

}

}

java线程同步的死锁_Java基础之线程5-线程同步死锁相关推荐

  1. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  2. java继承原理内存角度_Java基础知识巩固

    最近发现自己的Java基础知识还是有点薄弱,刚好有点空闲时间进行再补一补,然后进行整理一下,方便自己以后复习.其实个人认为Java基础还是很重要的,不管从事Java后端开发还是Android开发,Ja ...

  3. java线程池拒绝策略_Java核心知识 多线程并发 线程池原理(二十三)

    线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后 启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕, 再从队列中取出任务来执行.他 ...

  4. java与c内存管理_Java基础--Java内存管理与垃圾回收

    Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} public ...

  5. java 多线程 串行 加锁_Java多线程(2)线程锁

    多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...

  6. java中多线程重要吗_Java基础知识_多线程必要知识点

    一.使用多线程遇到的问题 1.1  线程安全问题 在前面的文章中,多线程主要是为了提高我们应用程序的使用率.但同时,这会给我们带来很多安全问题. 如果我们在单线程中以顺序(串行->独占)的方式执 ...

  7. java增强型for报错_Java基础——增强for循环

    java1.5版本引入了一个增强for循环,基本原理和for循环类似. 语法声明:for(表达式:条件表达式) 举例:for (String str : set) 解释:set代表set集合,str代 ...

  8. java三次登录锁定_Java基础知识点有哪些 如何快速步入Java行业

    Java基础知识点有哪些?如何快速步入Java行业?作为目前应用最广泛的编程语言之一,Java吸引了大量的人学习加入.Java编程是一门面向对象编程语言,具有简单易用.功能强大的特点,是目前互联网行业 ...

  9. java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...

    前言 大家好,我是Java进阶者.这篇文章我们主要介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 1.Object类是所有类的父类,所有类都继 ...

最新文章

  1. pytorch nn.Embedding
  2. rabbitmq 查询版本_基于rabbitmq解决分布式事务
  3. linux 用户态 隐藏进程 简介
  4. 数据结构实验之串三:KMP应用
  5. spring boot: Bean的初始化和销毁 (一般注入说明(三) AnnotationConfigApplicationContext容器 JSR250注解)...
  6. System.InvalidOperationException:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
  7. 微信程序开发系列教程(一)开发环境搭建
  8. SQL Server开发接口生成方法
  9. VLine[-1]=VLine[width]=128 数组的负一地址代表啥
  10. 媒体查询能html的ID吗,基于Javascript的媒体查询
  11. 什么是哲学为基础的设计模式?
  12. javascript之Bom简介
  13. BZOJ5232[Lydsy2017省队十连测] 好题
  14. 越狱与不越狱的区别 越狱有什么好处 越狱的优点
  15. 一代人终将老去,但总有人正年轻
  16. 1026 程序运行时间(C语言)
  17. Android-使用SimpleAdapter创建ListView
  18. 家具力学性能测试软件,家具力学性能
  19. python学习笔记(二)--深入了解python函数
  20. 搜狗拼音输入法,披着紫皮的狗

热门文章

  1. Collection和Map中易考的一些知识点
  2. JAVA程序设计----关于字符串的一些基本问题处理
  3. 糟糕程序员的20个坏习惯
  4. 左神算法:反转单向和双向链表(Java版)
  5. 【PAT甲级 排列组合】1093 Count PAT's (25 分) C++ 全部AC
  6. vb for循环 combobox的使用 Print的使用
  7. Pandas高级教程之:GroupBy用法
  8. Java将map置空_Java实现过滤掉map集合中key或value为空的值示例
  9. 循环首次适应算法_面向6G的极化编码链路自适应技术
  10. 2PC协议(2-phase-commit protocol)