java使用lock实现一个简单的死锁程序
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; public class Four {
public static void main(String[] args) {
final Service1 myService = new Service1();
for(int i = 0 ; i < 10 ; i ++){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true){
myService.push();
}
}
});
thread.start();
}
for(int i = 0 ; i < 10 ; i ++){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true){
myService.pop();
}
}
});
thread.start();
}
}
} class Service1{
//创建锁
private ReentrantLock lock1 = new ReentrantLock();
private ReentrantLock lock2 = new ReentrantLock();
//创建通讯器
private Condition condition = lock1.newCondition();
//创建一个开关
private boolean off = false; public void push(){
try {
lock1.lock();
if(off == false) condition.wait();
System.out.println("生产!");
off = false;
//让线程睡一会,保证B线程能够被锁住
Thread.sleep(3000);
this.pop();
condition.signalAll();
} catch (Exception e) {
// TODO: handle exception
}finally {
lock1.unlock();
}
}
public void pop(){
try {
lock2.lock();
if(off == true) condition.wait();
System.out.println("消费!");
off = true;
Thread.sleep(3000);
this.push();
condition.signalAll();
} catch (Exception e) {
// TODO: handle exception
}finally {
lock2.unlock();
}
}
}
java使用lock实现一个简单的死锁程序的更多相关文章
- java使用lock实现一个简单的生产者和消费者模式
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public ...
- 用java从0生成一个简单的excel
用java从0生成一个简单的excel 目标 用代码实现对一个excel的基础操作,包括创建,插入文字,(好像就这些了),生成的excel可以用wps打开,如果直接用c++的文件流会生成假的xls表格 ...
- 利用JSP编程技术实现一个简单的购物车程序
实验二 JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...
- 一个简单的JSP程序示例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- 3.2 Lucene实战:一个简单的小程序
在讲解Lucene索引和检索的原理之前,我们先来实战Lucene:一个简单的小程序! 一.索引小程序 首先,new一个java project,名字叫做LuceneIndex. 然后,在project ...
- Flink源码分析 - 剖析一个简单的Flink程序
本篇文章首发于头条号Flink程序是如何执行的?通过源码来剖析一个简单的Flink程序,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech) ...
- 编写一个简单的C++程序
编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...
- 使用Go开发一个简单的服务器程序
最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都觉得JS是反人类的.后台就用了go处理, ...
- 一个简单的flask程序
初始化 所有Flask程序都必须创建一个程序实例. 程序实例是Flask类的对象,经常使用下述代码创建: from flask import Flask app = Flask(__name__) F ...
随机推荐
- iOS仿UC浏览器顶部频道滚动效果
很喜欢用UC浏览器上网,当然不是给UC打广告,里面有很多酷炫的效果,值的学习,这次分享的是频道滚动的效果.动画效果如下: 实现的这个效果的关键是绘制,重写顶部Label的drawRect方法 gith ...
- ava Maven项目之Nexus私服搭建和版本管理应用
目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维 ...
- [Virtualization] Virtualbox 转换磁盘格式(vboxmanage) disk to VMware
一.需求 今天去参加网络安全的培训,Engineer 分享了一份 Virtual box 虚拟机.但是只有我拷取了这份文件,小伙伴们都是装的 VMware Workstation.那么该如何将vdi转 ...
- 理解 atime,ctime,mtime (下)
话不多说,开始下篇. # 前言 通过 "理解 atime,ctime,mtime (上)" 我们已经知道了atime 是文件访问时间:ctime是文件权限改变时间:mtime是文件 ...
- day 14 自定义模块,常用模块 time .datetime ,time 模块
内容大纲 一:Import 模块 1,创建一个以tbjx命名的名称空间 2,执行此模块的代码,并将所有内容加载到内存 3,调用此模块的代码要通过tbjx.的方式 二:from 包 import 模块 ...
- day 02 ---class - homework
# -*- coding: utf-8 -*-# @Time : 2018/12/20 14:34# @Author : Endless-cloud# @Site : # @File : day 02 ...
- java日期时间
字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27 ...
- node-redis模块需要注意的事项
node之中连接redis使用的redis模块,虽然好用,但是有些地方还是需要注意. npm install redis redis client 行为:1.客户端执行过程中断网的情况 由于原本连接正 ...
- CSS03--框模型、定位position、浮动
我们接着“CSS02”,继续学习一些新的样式属性. 1.框模型: 规定了元素框处理 元素内容.内边距(padding).边框(border).外边距(margin,可以是负值)的方式 2.内边距 ...
- python 全栈开发:数据类型整体分析
数据类型初始 数据类型: int :用于计算. 例子:1.2.3.4........................... 常用方法操作: bit_length() ps:求一个数字转换成二 ...