java Lock接口详解及实例代码
java Lock接口
java.util.concurrent.locks
接口Lock
public interface Loce
Loce实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class IntegerDemo { public static void main(String[] args) { // 创建3个线程对象 SellTicket st = new SellTicket(); Thread t1 = new Thread(st, "窗口1"); Thread t2 = new Thread(st, "窗口2"); Thread t3 = new Thread(st, "窗口3"); // 启动线程 t1.start(); t2.start(); t3.start(); } } class SellTicket implements Runnable { private int ticket = 100; private Lock lock = new ReentrantLock(); public void run() { while (true) { lock.lock(); if (ticket > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出售第" + (ticket--) + "张票。"); } lock.unlock(); } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
Java Lock接口实现原理及实例解析
1.概述 JUC中locks包下常用的类与接口图如下: 图中,Lock和ReadWriteLock是顶层锁的接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock. ReadWriteLock 接口以类似方式定义了读锁而写锁.此包只提供了一个实现,即 ReentrantReadWriteLock. Condition 接口描述了可能会与锁有关联的条件变量.这些变量在用法上与使用 Object
-
java并发之Lock接口的深入讲解
目录 Juc中各种各样锁信息 synchronized面临缺点 Lock接口 对比 Lock和tryLock的区别 总结 Juc中各种各样锁信息 在java的juc包为我们提供了各种各样的锁信息.如果细心来看其大部分都会实现一个名为LOCK的接口信息本文皆在帮你回顾Lock信息: 通过本文你将了解到如下内容: 1.Lock和synchronized的对比 2.Lock中常见API的总结 synchronized面临缺点 锁的出现主要是为了保证在并发访问共享资源时不出现错. 在java中如果不考虑
-
java Lock接口详解及实例代码
java Lock接口 java.util.concurrent.locks 接口Lock public interface Loce Loce实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作 import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class IntegerDemo { public static void main
-
java Lock接口详解及实例代码
java Lock接口 java.util.concurrent.locks 接口Lock public interface Loce Loce实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作 import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class IntegerDemo { public static void main
-
Java中自定义异常详解及实例代码
Java中自定义异常详解及实例代码 下面做了归纳总结,欢迎批评指正 自定义异常 class ChushulingException extends Exception { public ChushulingException(String msg) { super(msg); } } class ChushufuException extends Exception { public ChushufuException(String msg) { super(msg); } } 自定义异常 En
-
java IO 字节流详解及实例代码
java IO 字节流详解 1. 如何理解输入输出流? 这是我当初在学习Java IO这一块很难理解的一块,输入输出流我们可必须以一个为参照物:我们以内存为参照物,凡是写入内存的我们叫输入流,从内存中写出的我们叫输出流.看下面的示例图 有了这样的一个概念对于我们再学习Java中的IO流我相信就会变得特别简单了. 2. 再看流的分类 流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕.流分类的方式很多: 1.按照输入的方向分,输入流和输出流,输入输出的参
-
java LinkedList类详解及实例代码
java LinkedList类详解 LinkedList的特有功能 A:添加功能 public void addFirst(Object e); public void addLast(Object e); B:特有功能 public Object getFirst(); public Object getLast(); C:删除功能 public Object removeFirst(); public Object removeLast(); 实例代码: import java.util
-
java LinkedList类详解及实例代码
java LinkedList类详解 LinkedList的特有功能 A:添加功能 public void addFirst(Object e); public void addLast(Object e); B:特有功能 public Object getFirst(); public Object getLast(); C:删除功能 public Object removeFirst(); public Object removeLast(); 实例代码: import java.util
-
Java instanceof用法详解及实例代码
Java instanceof用法详解 Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: result = object instanceof class 参数: Result:布尔类型. Object:必选项.任意对象表达式. Class:必选项.任意已定义的对象类. 说明: 如果 object 是 class 的一个实例,则 instanceof 运
-
java Super 用法详解及实例代码
java Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量: 2)在一个构造函数中调用另外一个构造函数的时候应该用的是同一块内存空间,在默认的构造函数中先初始化变量,调用另一个的时候覆写已经初始化的变量的值: 3)整个调用的过程和递归调用函数有点类似,不断充气球,直到整个气球膨胀起来,不断的深层递进,遇到停止标记,逐层的跳出来. 写了段代码,解释我上面的叙
-
java Super 用法详解及实例代码
java Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量: 2)在一个构造函数中调用另外一个构造函数的时候应该用的是同一块内存空间,在默认的构造函数中先初始化变量,调用另一个的时候覆写已经初始化的变量的值: 3)整个调用的过程和递归调用函数有点类似,不断充气球,直到整个气球膨胀起来,不断的深层递进,遇到停止标记,逐层的跳出来. 写了段代码,解释我上面的叙
-
Java 反射机制详解及实例代码
Java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 package Reflect; /** * 通过一个对象获得完整的包名和类名 * */ class Demo{ //other codes... } class hello{ public static void main(String[] args) {
随机推荐
- 15个常用的javaScript正则表达式(收藏)
- Python Nose框架编写测试用例方法
- javascript实现window.print()去除页眉页脚
- jsvascript图像处理—(计算机视觉应用)图像金字塔
- LINQ to XML的编程基础
- mysql load data infile 的用法(40w数据 用了3-5秒导进mysql)
- Validform表单验证总结篇
- Linux 检测服务器是否连接着网络
- 显示随机的5个数
- ASP.NET Core项目配置教程(6)
- php foreach循环中使用引用的问题
- 在Python中使用poplib模块收取邮件的教程
- Mysql5.7中JSON操作函数使用说明
- PHP发表心情投票功能示例(附源码)
- 基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
- 基于Socket的网络连接 Flex与.NET互操作(一)
- 利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
- Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
- 基于ajax后台返回的数据为空前台显示出现undefined的解决方法
- JS实现水平遍历和嵌套递归操作示例