/**
* @author
*
* Lock 是java.util.concurrent.locks下提供的java线程锁,作用跟synchronized类似,
* 单是比它更加面向对象,两个线程执行代码段要实现互斥效果,他们需要用同一个Lock,
* 锁存在资源类的内部中,而不是存在线程上。
*/
public class ThreadLock {
public static void main(String[] args) {
final Outputer out = new Outputer();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
out.output("duwenlei");
}
} }).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
out.output("shenjing");
}
}
}).start();
} } class Outputer {
private Lock lock = new ReentrantLock();
public void output(String name) {
lock.lock();
try { //这里必须加try,如果程序抛异常后,锁没有及时打开,程序会出异常
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
} finally {
lock.unlock();
}
}
}

Java线程锁一个简单Lock的更多相关文章

  1. Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁

    (1)synchronized 是互斥锁: (2)ReentrantLock 顾名思义 :可重入锁 (3)ReadWriteLock :读写锁 读写锁特点: a)多个读者可以同时进行读b)写者必须互斥 ...

  2. JAVA线程锁-读写锁

    JAVA线程锁,除Lock的传统锁,又有两种特殊锁,叫读写锁ReadWriteLock 其中多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥 例子: /** * java线程锁分为读写锁 ReadWri ...

  3. 工作常用4种Java线程锁的特点,性能比较、使用场景

    多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...

  4. [置顶] 深入探析Java线程锁机制

    今天在iteye上提了一个关于++操作和线程安全的问题,一位朋友的回答一言点醒梦中人,至此我对Java线程锁有了更加深刻的认识.在这里也做个总结供大家参考. 先看几段代码吧! 代码一: public  ...

  5. Java线程锁&分布式锁的理解及应用

    了解Java线程锁之前,先理解线程和进程的定义.进程是操作系统分配资源(CPU)的基本单位,线程是CPU执行的基本单位,一个进程可拥有多个线程,同进程间的多个线程共享分配给进程的资源.比如启动JVM时 ...

  6. JAVA课程设计——一个简单的教务人事管理系统

    大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...

  7. 使用JAVA实现的一个简单IOC注入实例

    https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...

  8. 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传

    使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址  ...

  9. Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇

    本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...

随机推荐

  1. C++静态成员和静态成员函数

    一:静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则 ...

  2. IOS彩票第一天基本框架搭建

    *****初始化 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionar ...

  3. GDC2016 执着于光影表现的【全境封锁】的开放世界渲染

    执着于光影表现[全境封锁]的开放世界渲染 Snowdrop(雪莲花)引擎的全局照明技术介绍   补上原文链接:http://game.watch.impress.co.jp/docs/news/201 ...

  4. 程序中的@Override是什么意思

    @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记 @Override是伪代码,表示重写( ...

  5. 微信蓝牙BLE接入调试指引 硬件篇

    1 平台框架简介 微信蓝牙BLE由三个模块组成,分别是蓝牙设备.微信和第三方服务器,如下图: 蓝牙设备与微信之间的通信是通过蓝牙GATT协议进行. 微信与第三方服器之间的通信是通过网络http 接口进 ...

  6. CocoaPods 学习

    参考文章 git address 1.简绍:CocoaPods是一个负责管理iOS项目中第三方开源代码的工具. 2.安装过程: $ sudo gem install cocoapods $ pod s ...

  7. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  8. zepto源码--核心方法4(包装)--学习笔记

    主要介绍一下wrap, wrapAll, wrapInner, unwrap方法. wrapAll 在所有匹配元素外面包一个单独的结构.结构可以是单个元素或 几个嵌套的元素,并且可以是html字符串或 ...

  9. awk 合并文件

      问题描述:两个文件a.dat, b.dat a.dat 0    100 1    99 2    93 3    90 ... b.dat 0   0 1   3 2   0 3   2 ... ...

  10. #if 0在代码中的作用

    #if 0在代码中有2个作用. 1.作为行内注释 /**/是多行注释,如果想在/**/里面嵌套一个多行注释,怎么办呢? /* int a=10; /* - (void)test{ NSLog(@&qu ...