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