- 博客(41)
- 收藏
- 关注
原创 23种设计模式-工厂模式
package design;/** * Created by Administrator on 2018/4/26. */public interface Shape { void draw(); void erase();}package design;import java.util.HashMap;import java.util.Map;/** ...
2018-04-26 23:32:53
130
原创 23种设计模式-动态代理
public class DynamicProxyDemo { public static void main(String[] clargs){ Foo prox= (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class[]{Foo.class}, new Inv...
2018-04-21 21:23:02
146
原创 23种设计模式-The PoolManager using Proxy
package design;import java.util.ArrayList;/** * Created by Administrator on 2018/4/18. */public class PoolManager { private static class PoolItem{ boolean inUse=false; Objec...
2018-04-19 23:34:27
164
原创 24种设计模式-代理
代理模式,:实际工作的类被隐藏在代理类的后面。当你调用代理类中的方法,实际上调用的是实体类中的方法package design;/** * Created by Administrator on 2018/4/19. */public interface ProxyBase { void f(); void g(); void h();}package des...
2018-04-19 23:05:42
120
原创 23种设计模式-Object Pool
在对象池中,你可能会面对一些共享对象的问题。你肯能需要创建一个方案包括共享对象的迁出或者迁入。package design;import java.util.ArrayList;/** * Created by Administrator on 2018/4/18. */public class PoolManager { private static class PoolI...
2018-04-18 23:13:37
180
原创 线程之间的写作
正如你所见到的,当你使用线程来同时运行多个任务时可以通过使用锁(互斥)来同步两个任务的行为,从而使得一个任务不会干涉另一个任务的资源。也就是说,如果两个任务在交替着步入某项共享资源(通常是内存),你可以使用互斥来使得任何时刻只有一个任务可以访问这项资源。当任务协作时,关键问题是这些任务之间的握手。为了实现这种握手,我们使用了相同的基础特性:互斥。在这种情况下,互斥能够确保只有一个任务可以响应某个信...
2018-04-18 22:38:50
111
原创 线程本地存储
防止任务在共享资源上产生冲突的第二种方式是根除对变量的共享。线程本地存储是一种自动化机制,可以为使用相同变量的每个不同线程都创建不同的存储。因此,如果你有5个线程都要使用变量x所表示的对象,那么线程本地存储就会生成5个用于x不同的存储块。主要是他们使得你可以将状态与线程关联起来。线程状态:一个线程可以处于以下四种状态之一:1)新建(new):当线程创建时,它只会短暂的处于这种状态,此时它已经分配了...
2018-04-17 23:18:32
224
原创 临界区
有时,你只是希望防止多个线程同时访问方法内部的部分代码而不是防止访问整个方法。通过这种方式分离出来的代码段被称为临界区,它也使用synchronized关键字建立。这里synchronized被用来指定某个对象,此对象的锁被用来对花括号的代码进行同步控制synchronized(syncObj){ this code can be accessed be only on...
2018-04-17 23:10:58
149
原创 原子性与易变性
了解原子性是很有用的,并且要知道原子性与其他高级技术一道,在java.util.concurrent类库中已经实现了某些更加巧妙的构件。但是要坚决抵挡住完全依赖自己的能力去进行处理的这种欲望。原子性可以应用于除long和double之外的所有基本类型之上的“简单操作”。对于读取和写入除long和double之外的基本类型变量这样的操作,可以保证它们会被当作不可分(原子)的操作来操作内存。但是JVM...
2018-04-17 23:01:16
291
原创 解决共享资源竞争
Java以提供关键字synchronized的形式,为防止资源冲突提供了内置支持。当任务要执行被synchronized关键字保护的代码片段的时候,它将检查锁是否可用,然后获取锁,执行代码,释放锁。共享资源一般是以对象形式存在的内存片段,但也可以是文件、输入/输出端口,或者是打印机。要控制对共享资源的访问,得先把它包装进一个对象。然后所有要访问这个资源的方法标记为synchronized。如果某个...
2018-04-17 21:07:35
438
原创 在线程之中加入另一个线程
一个线程可以在其他线程之上,调用join()方法,其效果是等待一段时间直到第二个线程结束才执行。如果某个线程在另外一个线程t上调用t.join(),此线程将被挂起,直到目标线程t结束才恢复(即t.isAlive()返回为假)。也可以在调用join()时带上一个超时参数(单位可以是毫秒,或者毫秒和纳秒)这样如果目标线程在这段时间到期时还没有结束的话,join()方法总能返回。对join()方法的调用...
2018-04-17 13:24:43
721
原创 设计模式之-单例模式(singleton)
在设计模式中,单例可能是最简单的设计模式。单例是一个提供 有且并且只有一个特定类型对象的方法。一个重要的方面是单例必须提供一个全局访问点,所以单例通常是你使用一个全局变量的解决方法。它通常应该有注册后者查找服务的特性。package designers.messenger.singleton;/** * Created by Administrator on 2018/4/14. * ne...
2018-04-14 23:02:37
131
原创 Excecutor使用
Java SE5的java.util.concurrent包中的执行器(Excecutor)将为你管理Thread对象,从而简化了并发编程。Excecutor在客户端和任务执行之间提供了一个间接层;与客户端直接执行任务不同,这个中介对象将执行任务。Excecutor允许你管理异步执行,而无需显式的管理线程的生命周期。public class CachedThreadPool { publi...
2018-04-12 19:51:53
668
原创 多线程定义任务
线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务只需实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。/** * Created by DELL_USER on 2018/4/12. */public class LiftOff implements Runnable { protected int countD...
2018-04-12 19:36:55
214
原创 XML
对象序列化的一个重要限制是它只是java的解决方案:只有java程序才能反序列化这种对象。一种更具互操作性的解决方案是将数据转换为XML方式,这可以使其被各种各样的平台和语言使用。因为XML非常流行,所以用它来编程时各种选择不胜枚举,包括随JDK发布的javax.xml.*类库。我们选择使用开源XOM类库(可从www.xom.nu下载并获得文档)public class Person { ...
2018-04-10 19:44:10
96
原创 文件枷锁
JDK1.4引入了文件枷锁机制,它允许我们同步访问某个作为共享资源的文件,不过竞争同一文件的两个线程很可能在不同的java虚拟机上;或者一个是java线程,另一个是操作系统中其他某个本地的线程。文件锁对其他的操作系统进程是可见,因为java的文件加锁直接映射到本地操作系统的枷锁工具。package io;import java.io.FileOutputStream;import java....
2018-04-06 22:54:52
221
原创 IO性能测试
package io;import java.io.*;import java.nio.IntBuffer;import java.nio.channels.FileChannel;/** * Created by Administrator on 2018/4/6. */public class MappedIO { private static int numOfIn...
2018-04-06 22:28:25
1436
原创 内存映射文件
内存映射文件允许我们创建和修改那些因为太大而不能放入内存的文件。有了内存映射文件,我们就可以假定整个文件都放在内存中,而且可以完全把它当作非常大的数组来访问。public class LargeMappedFiles { static int length=0x8FFFFFF;//128兆 public static void main(String[] args) throws ...
2018-04-05 23:14:39
87
原创 用缓冲器操纵数据
如果想把一个字节数组写到文件中去,那么就应该使用ByteBuffer.wrap()方法把字节数组包装起来,然后用getChannel()方法在FileOutputStream上打开一个通道,接着将来自于ByteBuffer的数据写到FileChannel中。注意ByteBuffer是将数据移进移出通道的唯一方式,并且我们只能创建一个独立的基本类型缓冲器,或者使用“as”方法从ByteBuffer中...
2018-04-05 22:32:58
381
原创 字节存放顺序
不同的机器可能会使用不同的字节排序方法来存储数据。”big endian“(高位优先)将最重要的字节放在地址最低的存储器单元。而”little endian“(低位优先)则是将最重要的字节放在地址最高的存储器单元。当存储量大于一个字节时,想int float等,就要考虑字节顺序问题了。ByteBuffer 是以高位优先的形式存储数据的,并且数据在网上传送时也常常使用高位优先的形式。我们可以使用带有...
2018-04-01 00:19:36
2024
原创 视图缓冲器
视图缓冲器,可以让我们通过某个特定的基本数据类型的视窗查看其底层的ByteBuffer。ByteBuffer依然是实际存储数据的地方,“支持”着前面的视图,因此对视图的任何修改都会映射成为对ByteBuffer中数据的修改public class IntBufferDemo { private static final int BSIZE=1024; public static v...
2018-03-26 23:58:19
390
原创 获取文本类型
尽管ByteBuffer只能保存字节类型的数据,但是它具有可以从其容纳的的字节中产生出各种不同基本类型的方法。下面这个例子展示了怎样使用这些方法来插入和抽取各种数值:public class GetData { private static final int BSIZE=1024; public static void main(String[] args){ /...
2018-03-26 23:25:03
1078
原创 转换数据
为了输出文件中的信息,我们必须每次只读取一个字节的数据,然后将每个byte类型强制转换成char类型。这种方法似乎有点原始--如果我们查看一下java.nio.CharBuffer这个类,将会发现它有一个toString()方法是这样定义的:返回一个包含缓冲器所有字符的字符串。既然ByteBuffer可以看做是具有asCharBuffer()方法的CharBuffer。那么为什么不用它呢?正如下面...
2018-03-26 22:55:08
173
原创 FileChannel文件复制
FileChannel,通道是一种相当基础的东西:可以向它传送用于读写的ByteBuffer,并且可以锁定文件的某些区域用于独占式访问。将字节存放于ByteBuffer的方法之一是:使用一种“put”方法直接对他们进行填充,填入一个或多个字节,或基本数据类型的值。不过正如所见,也可以使用wrap()方法将已存在的字节数组“包装”到ByteByffer中。一旦如此,就不再复制底层数组,而是把它作为所...
2018-03-22 23:26:40
709
原创 进程控制
你经常会需要在Java内部执行其他操作系统的程序,并且要控制这些程序的输入和输出。Java类库提供了执行这些操作的类。要想运行一个程序,你需要向OSExecute.command()传递一个command字符串,它与你在控制台上运行改程序所键入的命令相同,这个命令被传递给java.lang.ProcessBuilder构造器(它要求这个命令作为一个String对象序列而被传递),然后所产生的Pro...
2018-03-22 13:35:25
104
原创 FileChannel应用
JDK1,.4的java.nio.*包中引入了新的JavaI/O类库,其目的在于提高速度。实际上,旧的I/O包已经使用nio重新实现过,以便利用这种速度提高,因此,即使我们不显示的调用nio编写代码,也能从中受益。速度的提高在文件I/O和网络I/O中都有可能发生。速度的提高来自于所使用的的结构更接近于操作系统执行I/O的方式:通道和缓冲器。唯一直接与通道交互的缓冲器是ByteBuffer--也就是...
2018-03-22 00:04:23
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人