这个模式是这样的:所有线程都有一个入口,但是内部为每个线程分配了特有的存储空间。
这里需要用到ThreadLocal类,这个类的实例可以想象成保管箱间,他有大量的保管箱房间。ThreadLocal的实例只有一个但是管理多个对对象。他有方法set和(Object)get,set用来存储,这个方法是没有参数的,它会自动存放当前线程;而get用来取(没有拿走)线程,同样没有参数,因为他自己就是键值。
示例:TSLog用来做具体的写入工作
Log中有类属性ThreadLocal,用来读取的时候从ThreadLocal里面找到自己的线程用的TSLog类,然后把工作交给TSLog。取的时候先看当前线程是谁,然后找到这个线程放的TSLog。
CLientThread类开启一个线程,这个线程调用Log类。
import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class TSLog { private static PrintWriter writer=null; public TSLog(String filename){ try{ writer=new PrintWriter(new FileWriter(filename)); }catch(IOException e){ e.printStackTrace(); } } public static void println(String s){ writer.println(s); } public static void close(){ writer.println("==== END LOG ===="); writer.close(); } }
public class Log { private static final ThreadLocal tsLogCollection=new ThreadLocal(); public static void println(String s){ getTSLog().println(s); } public static void close(){ getTSLog().close(); } private static TSLog getTSLog(){ TSLog tsLog=(TSLog)tsLogCollection.get(); if(tsLog==null){ tsLog=new TSLog(Thread.currentThread().getName()+"-log.txt"); tsLogCollection.set(tsLog); } return tsLog; } }
public class ClientThread extends Thread { public ClientThread(String name){ super(name); } public void run(){ System.out.println(getName()+"Begin"); for(int i=0;i<10;i++){ NewLog.println("i="+i); try{ Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } } NewLog.close(); System.out.println(getName()+"End"); } }
public class Test { public static void main(String[] args){ new ClientThread("Alice").start(); new ClientThread("Bobby").start(); new ClientThread("Chris").start(); } }
这里,每个线程要做的具体工作TSLog实际在线程外,它被放到保管箱相(ThreadLocal)中,由所属线程去取。这里也不用担心其他线程会访问TSLog。需要注意的是互斥控制可能会隐藏在TSObjectionColecction。
相关推荐
`ACE_TSS`(Thread Specific Storage)类解决了多线程环境下的全局变量同步问题,为每个线程提供了一种私有化全局数据的机制,避免了同步冲突。 `ACE_Thread_Manager`类提供了多种方法以支持线程管理。例如,`...
ACE_TSS(Thread Specific Storage)则允许开发者在多线程环境中为每个线程存储私有数据,确保数据的安全性和隔离性。 除了基本功能外,ACE还提供了一些高级特性,如服务质量(QoS)管理、网络容错和恢复机制、性能...
在对象间通信方面,ACE提供了ACE_TSS(Thread Specific Storage)机制,用于存储线程局部数据,以及ACE_Acceptor和ACE_Connector类,它们简化了服务器和客户端的建立连接过程。ACE_ServantActivator和ACE_Svc_...
7. **分布式系统设计**:ACE_TSS(Thread Specific Storage)用于线程局部存储,ACE_Logger提供日志记录,ACE_WFMO_Reactor实现了Windows下的基于WaitFOrMultipleObjects的反应器。 8. **性能优化**:ACE_Dynamic_...
ACE_TSS(Thread Specific Storage)类允许开发者创建线程局部存储,解决了多线程环境下数据隔离的问题。 在分布式系统方面,ACE库支持CORBA(Common Object Request Broker Architecture),提供了一套完整的ORB...
Thread specific storage APIs 允许每个线程拥有独立的数据存储,使得线程可以使用与其它线程不同的变量值,而不必担心数据共享问题。Thread cancellation APIs 为线程提供了一种机制,使得线程可以在某个点被取消,...
在实际开发中,配合`ACE_TSS`(Thread Specific Storage)来管理线程局部存储,或者使用`ACE_Sched_Params`来调整调度策略,可以进一步提升应用程序的性能和适应性。总之,理解和熟练掌握`ACE_OS`命名空间的函数是...
2. **ACE_TSS (Thread Specific Storage)**:ACE提供了一种线程局部存储的实现,通过`ACE_TSS`类,可以在线程级别存储数据,保证了数据在多线程环境下的安全性。 3. **ACE_Acceptor and ACE_Connector**: 这两个类...
ACE_TSS(Thread Specific Storage)则提供了线程局部存储的解决方案,避免了多线程环境下数据共享带来的复杂性。 此外,书中的“系统化复用”概念强调了软件设计的模块化和可重用性。作者会讲解如何利用ACE库中的...
3. **对象之间的通信**:ACE提供了一套完整的消息传递和对象间通信机制,如ACE_TSS(Thread Specific Storage)用于线程局部存储,ACE_Acceptor和ACE_Connector实现服务端和服务客户端的连接管理。 4. **网络协议的...
ACE框架包含多个关键组件,如ACE_TSS (Thread Specific Storage)用于线程局部存储,ACE_Reactor模式处理事件,ACE_SOCK和ACE_SOCK_Dgram用于TCP/IP和UDP通信,ACE_Time_Value和ACE_DateTime支持时间管理和日期操作...
【并发并行】_【C/C++]_【使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例】 在多线程编程中,线程本地存储(Thread Local Storage,简称TLS)是一种用于存储线程私有数据的技术。每个线程都有...
Java多线程模式详解 目录: 一、漫谈UML Java语言的线程 多线程的评量标准 二、 ...11、Thread-Specific Storage ———— 每个线程的保管箱 12、Active Object ———— 接受异步消息的主动对象
10. **线程局部存储**:线程局部存储(TLS,Thread Local Storage)允许每个线程拥有自己的变量副本,避免了线程间的数据冲突。`pthread_getspecific()`和`pthread_setspecific()`函数用于访问和设置线程局部存储。 ...
线程局部存储(Thread Local Storage,TLS)使得每个线程可以拥有自己独立的变量副本,即使这些变量在全局或静态作用域内。`boost::thread_specific_ptr`是Boost库提供的一个工具,用于管理线程特有的指针,防止内存...
第5章 C/C++线程专有存储(Thread-Specific Storage):用于访问“per-Thread”状态的对象行为模式 第6章主动对象(Active Object):用于并发编程的对象行为模式 第 7 章 ACE 反应器(Reactor)的设计和使用:用于...
第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D ...
在Linux系统编程中,线程私有数据(Thread Local Storage,TLS)是一种机制,它允许每个线程拥有自己独立的数据副本,确保了数据在多线程环境中的安全性。线程私有数据通常用于存储线程特定的信息,如线程ID、调试...
在Android系统中,TLS(Thread-Local Storage)是一种机制,用于在多线程环境中为每个线程维护独立的数据存储。这种存储方式确保了每个线程都有自己的数据副本,避免了传统全局变量在并发访问时可能出现的竞态条件和...
- EFh:FEh:FFh:预留(Vendor Specific) 三、U盘驱动代码与枚举过程 1. Linux内核中负责USB存储设备驱动的代码文件主要分布在以下路径: - drivers/usb/storage/usb.c - drivers/usb/storage/transport.c - ...