重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
继承Thread之后,因为由一个线程类分别构造了多个个对象,所以各自有各自的数据,对象之间是数据不共享的 rubbable 所谓线程中的资源共享也就是多个线程对该资源只保存一份,而不是每个线程内都各自保存一份。
创新互联建站是一家专业提供巴林右旗企业网站建设,专注与成都网站制作、成都做网站、外贸营销网站建设、H5高端网站建设、小程序制作等业务。10年已为巴林右旗众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
java中有两种实现多线程的方式: 一种是通过继承Thread类,同时重写run()方法。但是java中,只允许单继承,也就是一个类只能继承一个父类,使得该方式具有一定的局限性,等下就知道了。
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处 避免点继承的局限,一个类可以继承多个接口。
1、从上面的分析我们可以知道,我们可以利用第二种方式实现多线程的资源共享,把资源保存在Runnable接口中,然后只创建一份实现了Runnable接口的类的实例传递个需要共享资源的线程就可以了。
2、需要保证线程安全。读写同一内存值,会发生读不是最新的数据,也导致写覆盖了后的数据错误。既然保持线程安全,继续用加“锁”。加锁的目的就好比排队,比如:获得执行权力就执行,没有获得的就等待。
3、只需创建一个Runnable,这个Runnable里有那个共享数据。
我找到的办法是使用MappedByteBuffer的方法映射一个文件,实现内存共享。
直接缓冲区 java内部是使用 DirectByteBuffer 来实现的。 堆缓冲区java内部是使用 HeapByteBuffer 来实现的。映射的字节缓冲区(MappedByteBuffer ) 不提供关闭或销毁方法。
除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。
共享内存在java中的实现 在jdk4中提供的类MappedByteBuffer为我们实现共享内存提供了较好的方法。该缓冲区实际上是一个磁盘文件的内存映像。