sync -- 3




概述java 在类库设计的过程中,对线程安全做了额外的考虑,因此诞生了丰富的线程安全容器类以及用于协调多个相互写作的线程控制流的同步工具类,特别是在 java5 和 java6 中引入了一些新模块,用来构造并发应用程序的一些常用模式 同步容器类众所周知,HashMap 和 ArrayList 等常用的容器类并不是线程安全的,但在单线程模型下,他们有着很好的执行效率早期,java 通过加锁的方式实现了两个线程安全的同步容器类:Vector 和 Hashtable我们也可以使用 java 类库中提供的 Collections 类的 synchronizedXxxx 方法来创建非线程安全容器的同步容器类如:List<Widget> widgetList = Collections.synchronizedList(new ArrayList<Widget>());  同步容器类的问题同步容器类是线程安全的,但是有些情况下需要客户端加锁来保护复合操作常见的复合操作包括:迭代(遍历容器)跳转(找到下一个元素)条件运算虽然同步容器类的所有操作都是线程安全的,但是当其他线程修
#读书笔记    #技术帖    #龙潭书斋    #sync   
概述前面的日志中,介绍了基本的线程安全知识,本篇日志中将介绍用来保证线程安全的设计模式,这是构建大规模工程的基础 在设计线程安全类的过程中,需要包含以下三个基本要素:找出构成对象状态的所有变量找出月梳妆台变量的不变形条件建立对象状态的并发访问管理策略 类的提供者为了保证开发人员对类的分析和维护,必须将包括如何在不违背对象不变性条件或后延条件的情况下访问对象状态在内的同步策略写入正式文档 实例封闭如果对象不是线程安全的,你可以通过多种技术来确保对象只能由单个线程访问,或者通过锁的方式保护对象的所有访问实例封闭机制是一种将对象实例封装到另一个对象中的线程安全设计模式,通过实例封闭与核实的加锁策略结合,可以确保以线程安全的方式调用非线程安全的对象public class PersonSet { private final Set<Person> mySet = new HashSet<Person>(); public synchronized void addPerson(Person p) { mySet.add(p); } public synchronized boolean containsPerson(Person p) { return mySet.contains(p); } } &nb
#技术帖    #龙潭书斋    #sync    #线程   
传统UNIX实现的内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘IO通过缓冲进行,即当写入文件时,内核通常先将该数据复制到一个缓冲区中,只有当缓冲区写满时才进行实际的IO操作,之中输出方式被称为“延迟写”延迟写减少了磁盘的读写次数,但降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并未写到磁盘上,甚至当系统发生故障时,这种延迟写可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与高速缓存中内容的一致性,UNIX提供了sync,fsync和fdatasync三个函数int fsync (int fd); int fdatasync (int fd); int sync (void); 若成功调用则返回0,否则返回-1 sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘结束fsync只对单一文件起作用(fd指定),并且会等待磁盘写入结束后返回。可以切实保证修改过的块立即写到磁盘上fdatasync函数类似于fsync,但他只影响文件的数据,而不会像fsync一样同步更新文件属性 通常,称为update的系统守护进程会周期性的(一般是30秒)调用sync函数,以保证定期冲洗内核的块缓冲区 注:freeBSD 和 mac os x 不支持fdatasync  var CODE_DIVS=[{"id
#读书笔记    #技术帖    #linux    #unix   



京ICP备15018585号