11.Java5的线程锁技术

 1 import java.util.concurrent.locks.Lock;
 2 import java.util.concurrent.locks.ReentrantLock;
 3
 4
 5 /**
 6  * java5的线程锁技术
 7  * Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似。
 8  * 锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须
 9  * 用在同一个Lock对象。锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中。
10  * @author LiTaiQing
11  */
12 public class LockTest {
13
14     public static void main(String[] args){
15         new LockTest().init();
16     }
17
18     private void init(){
19         /**
20          * 内部类访问局部变量,局部变量要加final
21          *         若此代码放在main中会报错,因为静态代码块不能访问内部类
22          */
23         final Outputer outputer = new Outputer();
24         new Thread(new Runnable(){
25             @Override
26             public void run() {
27                 while(true){
28                     outputer.output("zhangxiaoxiang");
29                 }
30             }
31         }).start();
32         new Thread(new Runnable(){
33             @Override
34             public void run() {
35                 while(true){
36                     outputer.output("lihuoming");
37                 }
38             }
39         }).start();
40     }
41
42     static class Outputer{
43         Lock lock = new ReentrantLock();
44         public void output(String name){
45             int len = name.length();
46             lock.lock();
47             try{
48                 for(int i = 0; i < len ; i++){
49                     System.out.print(name.charAt(i));
50                 }
51                 System.out.println();
52             }finally{
53                 lock.unlock();
54             }
55         }
56     }
57 }
时间: 2024-11-07 11:17:31

11.Java5的线程锁技术的相关文章

多线程11_张孝祥 java5的线程锁技术

本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest2 { public static void main(String[] args) { new LockTest2().init(); } private void init() { //两个线程同时使用同一个Outputer对象,来确保他们使用的是同一把锁 final Outputer outp

【java并发】线程锁技术的使用

线程锁好比传统线程模型中的synchronized技术,但是比sychronized方式更加面向对象,与生活中的锁类似,锁本身也应该是个对象.两个线程执行的代码片段如果要实现同步互斥的效果,它们必须用同一个锁对象.锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中.这一篇博文主要总结一下线程锁技术中Lock锁.ReadWriteLock锁的使用. 1. Lock的简单使用 有了synchronized的基础,Lock就比较简单了,首先看一个实例: public class LockTes

JDK5什么是新的线程锁技术(两)

一个. Lock线程同步实现互斥 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也是一个对象. 两个线程运行的代码片段要实现同步相互排斥的效果.他们必须用同一个Lock对象.锁是上在代表要操作的资源的类的内部方法中, 而不是线程代码中. public class LockTest { public static void main(String[] args) { new LockTest().init(); } private void init(

JDK5新特性之线程锁技术(二)

一. Lock实现线程同步互斥 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也是一个对象. 两个线程执行的代码片段要实现同步互斥的效果,他们必须用同一个Lock对象.锁是上在代表要操作的资源的类的内部方法中, 而不是线程代码中. public class LockTest { public static void main(String[] args) { new LockTest().init(); } private void init() {

基于无锁队列和c++11的高性能线程池

基于无锁队列和c++11的高性能线程池线程使用c++11库和线程池之间的消息通讯使用一个简单的无锁消息队列适用于linux平台,gcc 4.6以上 标签: <无> 代码片段(6)[全屏查看所有代码] 1. [代码]lckfree.h ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 // lckfree.h //

c++11多线程---线程锁(mutex)

#include<mutex> 包含四类锁: 1      std::mutex    最基本也是最常用的互斥类 2      std::recursive_mutex  同一线程内可递归(重入)的互斥类 3      std::timed_mutex 除具备mutex功能外,还提供了带时限请求锁定的能力 4      std::recursive_timed_mutex      同一线程内可递归(重入)的timed_mutex 锁的操作: 1.lock, try_lock, unlock

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把

并发库应用之四 &amp; 线程锁Lock应用

Java5的线程并发库中,提供了相应的线程锁接口Lock来帮助我们同步处理.Lock比传统线程模型中的synchronized更加面向对象,锁本身也是一个对象,两个线程执行的代码要实现同步互斥效果,就要使用同一个锁对象.锁要上在要操作的资源类的内部方法中,而不是线程代码中. java.util.concurrent.locks在并发编程中很常用的实用接口.   |----Lock    实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作   |----ReadWrit

JDK5.0 特性-线程锁Lock

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291470.html 1 import java.util.concurrent.ExecutorService; 2 3 import java.util.concurrent.Executors; 4 5 import java.util.concurrent.Future; 6 7 import java.util.concurrent.locks.Lock; 8 9 import j