import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; /**
* Created by chengtao on 17/12/5.
* Lock 是替代 sycronized 的,相比sycronized 更加面向对象
* java.util.concurrent.locks.Lock;
* java.util.concurrent.locks.ReentrantLock;
*/
public class Thread1101_Lock { /**
* @param args
*/
public static void main(String[] args)throws Exception {
new Thread1101_Lock().init();
} private void init() throws Exception{
final Outputer outputer = new Outputer();
new Thread(new Runnable(){
public void run() {
while(true){
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
outputer.output("zhangxiaoxiang");
} }
}).start(); new Thread(new Runnable(){
public void run() {
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.output("lihuoming");
} }
}).start(); } static class Outputer{
Lock lock = new ReentrantLock();
public void output(String name){
int len = name.length();
lock.lock(); //和output1 对比 lock和synchronized的异同
try{
for(int i=0;i<len;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}finally{
lock.unlock(); //和output1 对比 lock和synchronized的异同
}
} /*
通过同步代码块来控制,注意锁对象一定要唯一
*/
public void output1(String name){
int len = name.length();
synchronized (Outputer.class) {
for(int i=0;i<len;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
} public synchronized void output2(String name){
int len = name.length();
for(int i=0;i<len;i++){
System.out.print(name.charAt(i));
}
System.out.println();
} public static synchronized void output3(String name){
int len = name.length();
for(int i=0;i<len;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}

最新文章

  1. C#中的?和??的用法
  2. [No000061]&quot;别人&quot;凭什么要帮你?&amp;理解中国人的人际和谐&amp;外人、自己人与另一半
  3. leetcode:Reverse Integer(一个整数反序输出)
  4. HDU -2670 Girl Love Value
  5. [原创]抢先DriverStudio夺取机器控制权(下篇)
  6. Android入门之环境搭建
  7. VS生成桌面应用程序
  8. centos 日常操作指令
  9. Hibernate框架笔记04HQL_QBC查询详解_抓取策略优化机制
  10. linux使用shell脚本停止java进程
  11. 【转】C++对成员访问运算符-&gt;的重载
  12. 【迎圣诞,拿大奖】+流量分析+Writeup分享
  13. 0003 - 基于xml的Spring Bean 的创建过程
  14. iOS开源项目周报0406
  15. SaltStack系列(四)之实例编写
  16. java设计模式-----5、原型模式
  17. 【贪心】【multiset】Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) C. Naming Company
  18. 用HyperMesh(7.0)手工修改网格
  19. 【scala】可变参数
  20. HTML5本地存储和本地的数据库

热门文章

  1. oozie常见错误问题
  2. Modsecurity原理分析--从防御方面谈WAF的绕过(一)
  3. [转]hadoop,spark,storm,pig,hive,mahout等到底有什么区别和联系?
  4. thinkphp 如何调用百度echarts 数据报表插件
  5. thinkphp 原生sql使用分页类
  6. jQuery监控文本框事件并作相应处理的方法
  7. 灵活的javaScript
  8. AsyncTask--远程图片获取与本地缓存
  9. 【黑金原创教程】【TimeQuest】【第三章】TimeQuest 扫盲文
  10. 【黑金原创教程】【Modelsim】【第五章】仿真就是人生