synchronized和lock(CAS)的区别
在设计多线程开发时,无可避免地需要在多个线程中操作同一个对象,例如多个线程向集合中同时读写数据,执行同一个方法。诚然,做到线程安全的最终方法就是不在线程间同步数据,但有时候同步操作在所难免。
那么,接下来我们来谈谈java提供的两种线程间安全同步数据的方法。
在设计多线程开发时,无可避免地需要在多个线程中操作同一个对象,例如多个线程向集合中同时读写数据,执行同一个方法。诚然,做到线程安全的最终方法就是不在线程间同步数据,但有时候同步操作在所难免。
那么,接下来我们来谈谈java提供的两种线程间安全同步数据的方法。
在《java编程思想》这本书中,初学者很难理解IO这一篇章,各种类各种用法记起来让人头疼。究其根本,还是对IO不够了解。笔者在工作中也遇到了一些关于IO的的问题,现在就来谈一谈笔者自己的理解。
在java线程使用上,他的常用接口是Runable
。这个接口只有一个方法那就是run()
方法,这个方法没有入参没有返回参数。如果我们想在线程运行完后获取运行的结果,那么一定要了解Callable
和Future
了。
ThreadLocal,网传可以实现多线程变量安全共享。其实它只是一个半成品,其本身并没有提供变量安全共享,它实现了一个多线程从同一个对象获取相同类型对象实例的工具。
RMI全称是Remote Method Invocation(远程方法调用),Java RMI威力体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。