package thread;
import java.util.concurrent.locks.*;/*** @author Alina* @date 2021年12月20日 11:07 下午* JDK5新特性* import java.util.concurrent.locks 包* lock接口*      void lock() 获取锁,进同步*      void unlock () 释放锁,出同步***/
class Tickerts implements Runnable{private Lock l = new ReentrantLock();private int  ticketnum = 100;public void run(){while(true){try{l.lock();if(ticketnum>0){Thread.sleep(100);System.out.println(Thread.currentThread().getName()+"..."+"出售的票数为:"+ticketnum);ticketnum--;}}catch (Exception e ){}finally {l.unlock();}}}}
public class LockDemo {public static void main(String[] args) {Tickerts ti = new Tickerts();Thread t0 = new Thread(ti);Thread t1 = new Thread(ti);Thread t2 = new Thread(ti);t0.start();t1.start();t2.start();}}
package thread;/*** @author Alina* @date 2021年12月20日 11:55 下午*/
class A_lock{public static A_lock A_lock = new A_lock();
}
class B_lock{public static B_lock B_lock = new B_lock();
}
class DeadLock implements Runnable {private boolean love ;public DeadLock(boolean love) {this.love = love;}public void run(){while (true){if(love){synchronized (A_lock.A_lock){System.out.println("A");synchronized (B_lock.B_lock){System.out.println("B");}}}else {synchronized (B_lock.B_lock){System.out.println("B");synchronized (A_lock.A_lock){System.out.println("A");}}}}}
}
public class DeadDome {public static void main(String[] args) {DeadLock d0 = new DeadLock(true);DeadLock d1  = new DeadLock(false);Thread t0 = new Thread(d0);Thread t1 = new Thread(d1);t0.start();t1.start();}
}

(JAVA)线程之lock和死锁(例)相关推荐

  1. Java多线程之Lock接口

    为什么80%的码农都做不了架构师?>>>    Lock接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多 ...

  2. Java线程之Synchronized用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对 ...

  3. lock 线程 java_Java多线程之Lock的应用

    作为Java的另外一种同步机制,Lock与synchronized有很大的相似性,都可以实现多线程共用方法的同步和线程内代码块的同步.如果是实现共用方法同步,只需要在共用对象中生成一个Lock,并在共 ...

  4. JAVA线程之Thread类详解

    Thread类用于操作线程,是所以涉及到线程操作(如并发)的基础.本文将通过源码对Thread类的功能作用进行分析. 一.属性 /* Make sure registerNatives is the ...

  5. java线程之InheritableThreadLocal

    ThreadLocal和InheritableThreadLocal区别,可以用代码测试一下: [java] view plain copy package com.lang; import juni ...

  6. C++/Java线程之分

    JAVA线程状态图 1.C++/windows中主线程结束,其他线程必然死亡(即使调用pthread_detach解除父子关系,主线程消亡时也会导致子线程被迫关闭). ----1.1 一个进程中可以有 ...

  7. Java线程之CompletionService批处理任务

    如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...

  8. Java线程之CompletionService

    当使用ExecutorService启动了多个Callable后,每个Callable会产生一个Future,我们需要将多个Future存入一个线性表,用于之后处理数据.当然,还有更复杂的情况,有5个 ...

  9. Java线程之setDaemon(true)方法的作用

    一.线程 JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个Illeg ...

最新文章

  1. Go语言底层原理剖析
  2. 性能压测诡异的Requests/second 响应刺尖问题
  3. Ubuntu20.04 远程桌面共享vnc
  4. android 清空canvas部分内容_Android自定义View实现圆形头像效果
  5. CentOS 更改MySQL数据库目录位置
  6. Origin使用手册/笔记第一部分:工作表行列操作
  7. 使用 TensorFlow 构建机器学习项目中文版
  8. Android BLE(2)---蓝牙学习
  9. 380天!理想汽车交付量突破30000辆
  10. 操作系统的运行机制体系结构
  11. 如何查看sql2000 sp4是否安装成功 及sp4补丁安装
  12. mysql 插入数据报错,a foreign key constraint fails
  13. 重装战姬服务器维护,重装战姬2020年9月10日更新维护公告重装战姬2020年9月10日更新了什么 - 量产资源网...
  14. 是否还被word中各种下划线、波浪线困扰,来看这里(Word中拼写语法错误)
  15. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
  16. 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建
  17. 用辅助功能实现自动点击
  18. CRM平台十点功能帮助企业提高销售营销技巧(下)
  19. 胸上肌到底要怎么练啊!
  20. 基于微信小程序菜谱查询app设计

热门文章

  1. 前端学习(175):弹窗
  2. 第四十八期:你太菜了,竟然不知道Code Review?
  3. html:(6):body标签和p标签
  4. impala简介(大数据技术)
  5. flask web开发的相关博文学习
  6. java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...
  7. CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数
  8. UVa11988 Broken Keyboard(练习链表使用)
  9. Thinkphp 数据库配置参数
  10. 关于tag,viewWithTag