Java序列化的并发问题

Java 实现了Serializable接口后,那么并发问题Java源码帮我们解决了吗?

2个回答

 并发跟序列化没有关系,并发是程序中使用多线程处理问题,并发需要注意共享数据的同步访问控制,因为Java的堆内存是多线程共享的,所以对内存中的数据即对象,也是共享的,所以这就需要考虑线程安全问题。而序列化的作用主要是便于数据网络传输,是远程方法调用的基础。二者没有关系的。

并没有,并发需要你自己控制。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java序列化和Hessian序列化问题
Java序列化Java序列化是对对象的结构和内容的完全描述,所以数据会比较大,但是安全可靠。Hessian序列化着重数据的序列化,简单类型信息会直接附带;复杂类型序列化成Map,包含基本类型描述和数据内容。而在序列化过程中,如果一个对象之前出现过,hessian会直接插入一个R index这样的块来表示一个引用位置,从而省去再次序列化和反序列化的时间。这样做的代价就是hessian需要对不同的类型进
Java序列化之自定义序列化
背景 进行序列化传输时,有时不仅需要对象本身的数据,还需要传输一些额外的辅助信息,以保证信息的安全、完整和正确。为了做到这点需求,Java提供了一套有效的机制,允许在序列化和反序列化时,使用定制的方法进行相应的处理。 自定义与不自定义的区别在于,不自定义序列化时只是普通地将对象保存到文件中,而自定义时,在讲对象保存到文件前后都可以做一些代码实现。 两个接口 Java为程序员自定义序
JAVA序列化和发序列化
1、什么是序列化和反序列化 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。 反序列化:客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通...
java 序列化与解序列化
一道《head first java》的例题nimport java.io.*;nnclass DungeonTestn n public static void main(String[] args)n DungeonGame d=new DungeonGame();n n System.out.println(d.getX()+d.getY()+d.getZ()); **//这个输出是12**n n tryn FileOutputStream fos=new FileOutputStream("dg.ser");n ObjectOutputStream oos=new ObjectOutputStream(fos);n oos.writeObject(d);n oos.close();n n FileInputStream fis=new FileInputStream("dg.ser");n ObjectInputStream ois=new ObjectInputStream(fis);n d=(DungeonGame)ois.readObject();n ois.close();n n System.out.println(d.getX()+d.getY()+d.getZ()); **//这个输出是8**nn catch(Exception e)e.printStackTrace();n n n n nnclass DungeonGame implements Serializablen public int x=3;n transient long y=4;n private short z=5;nn int getX()n return x;n n long getY()n return y;n n short getZ()n return z;n nnn2个输出分别为12,和8.nn我搞不懂序列化的和解序列化的过程中,是哪里数据发生了变化。
序列化之JAVA原生序列化
JAVA原生序列化 在做redis缓存的时候,考虑到对象直接序列化为byte[],中间节省了转化为json字符串的一步,能提高一点效率,最开始考虑的就是Java内置序列化方案,那么下面直接上代码,一个序列化工具类 public class JavaSerializerUtil { public static <T> byte[] serialize(T obj) { ...
Kryo序列化与Java序列化
1.序列化在Spark中的用处 在算子函数中使用到外部变量时,该变量会被序列化后进行网络传输 将自定义的类型作为RDD的泛型类型时(比如JavaRDD,Student是自定义类型),所有自定义类型对象,都会进行序列化。因此这种情况下,也要求自定义的类必须实现Serializable接口。 使用可序列化的持久化策略时(比如MEMORY_ONLY_SER),Spark会将RDD中的每个partit...
java序列化问题
与外部系统对接时,遇到一个问题记录一下。 对接系统使用的都是国际标准的RSA加密方式,实现语言是java。我们这边开发系统的时候使用python。在RSA解密的时候解析不出正确的源文。 怀疑原因:由于java默认提供的序列化机制——实现java.io.Serializable接口并生成序列化ID,这样子就可以通过java.io.ObjectInput和java.io.ObjectOutput实...
java内部类序列化的问题
java中,类实现了java.io.Serializable就可以序列化了,但是内部类有点特殊,内部类的序列化问题需要考虑外部类,如果仅仅内部类实现了java.io.Serializable,那么这个内部类是不能被序列化的,此时外部类也需要实现java.io.Serializable,详细文章可以阅读https://blog.csdn.net/lrxb_123/article/details/73...
关于java序列化问题
java 序列化工具 XStream JAXB Simple2.0 哪个更好,大家里讨论下,初步觉得Simple2.0简单易用,大家认为呢
JAVA序列化问题求助
先上代码:rn[code=java]public interface T rnrn void test();rn[/code]rn[code=java]public class ST implements Trnrn @Overridern public void test() rn List d=new ArrayList<>();rn d.add(new UserSevenDayFace()setDate("K");setOfficialPrice(0.0);setUserPrice(0.0););rn //这里封装了一个方法将这个集合序列化后存入Redis中,但是运行程序这里会报错:rn //java.io.NotSerializableException: com.dingxin.kunyu.test.STrn SimpleCacheUtil.setObject("a", d);rn System.out.println("d");rn System.out.println(SimpleCacheUtil.getObject("a"));rn rn rn public static void main(String[] args) rn new ST().test();rn rn[/code]rnrnUserSevenDayFace类:rn[code=java]public class UserSevenDayFace implements Serializablernrn /**rn * rn */rn private static final long serialVersionUID = 1L;rn private String date;rn private Double officialPrice;rn private Double userPrice;rn public String getDate() rn return date;rn rn public void setDate(String date) rn this.date = date;rn rn public Double getOfficialPrice() rn return officialPrice;rn rn public void setOfficialPrice(Double officialPrice) rn this.officialPrice = officialPrice;rn rn public Double getUserPrice() rn return userPrice;rn rn public void setUserPrice(Double userPrice) rn this.userPrice = userPrice;rn rn[/code]rn现在的问题的为什么这样无法对UserSevenDayFace类进行序列化?rn反编译了一下class文件发现ST 类的代码有两个ST.class与ST$1.class是,rnST$1.class代码为:rn[code=java]class ST$1rn extends UserSevenDayFacernrn ST$1(ST paramST)rn rn setDate("K");setOfficialPrice(Double.valueOf(0.0D));setUserPrice(Double.valueOf(0.0D));rn rn[/code]rn对这个代码不太理解,为什么ST$1的构造函数中会有ST 参数?rnrn我对ST的代码做了下修改:rnST:rn[code=java]public class ST implements Trnrn @Overridern public void test() rn rn rn rn public static void main(String[] args) rn List d=new ArrayList<>();rn d.add(new UserSevenDayFace()setDate("K");setOfficialPrice(0.0);setUserPrice(0.0););rn SimpleCacheUtil.setObject("a", d);rn System.out.println("d");rn System.out.println(SimpleCacheUtil.getObject("a"));rn rn[/code]rn编译后同样有两个文件ST与ST$1rnST$1代码为:rn[code=java]class ST$1rn extends UserSevenDayFacernrn ST$1()rn rn setDate("K");setOfficialPrice(Double.valueOf(0.0D));setUserPrice(Double.valueOf(0.0D));rn rnrn[/code]rn但是这里再运行发现 程序可以正常执行,也可以序列化了,但是为什么 ?而且为什么ST$1的构造函数中没有了参数?
java 序列化的问题??
[code=Java]rnrnpublic List getAllApps(Context mContext) rnrn // 先获取需要过滤掉的应用rn PackageManager packageManager = mContext.getPackageManager();rn // 所有应用列表rn Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);rn mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);rnrn List tempAppList = packageManager.queryIntentActivities(rn mainIntent, 0);rn for (int i = 0; i < tempAppList.size(); i++) rn APPEntity app = new APPEntity();rn ResolveInfo info = tempAppList.get(i);rn app.setAppName(String.valueOf(info.loadLabel(packageManager)));rn app.setPackageName(info.resolvePackageName);rn app.setIcon(info.loadIcon(packageManager));rn appEntity.add(app);rn rnrn return tempAppList;rn rnrnrnrnrn public void serial() rn ByteArrayOutputStream baos = null;rn ObjectOutputStream oos = null;rn try rn baos = new ByteArrayOutputStream(); // 构造一个字节输出流rn oos = new ObjectOutputStream(baos);rn oos.writeObject(appEntity);rn catch (IOException e) rn e.printStackTrace();rn finally rnrn rn rnoos.writeObject(appEntity);一直报序列化的错误?请问有什么好的解决办法???rn11-01 19:53:19.648: W/System.err(10593): java.io.NotSerializableException: android.graphics.drawable.BitmapDrawablern11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1547)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1859)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1701)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1665)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1153)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:420)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1251)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1587)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1859)rn11-01 19:53:19.658: W/System.err(10593): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1701)rn11-01 19:53:19.668: W/System.err(10593): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1665)rn11-01 19:53:19.668: W/System.err(10593): at java.util.ArrayList.writeObject(ArrayList.java:648)rn11-01 19:53:19.668: W/System.err(10593): at java.lang.reflect.Method.invokeNative(Native Method)rn11-01 19:53:19.678: W/System.err(10593): at java.lang.reflect.Method.invoke(Method.java:521)rn11-01 19:53:19.678: W/System.err(10593): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1229)rn11-01 19:53:19.678: W/System.err(10593): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1587)rn11-01 19:53:19.678: W/System.err(10593): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1701)rn11-01 19:53:19.678: W/System.err(10593): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1665)rn11-01 19:53:19.678: W/System.err(10593): at com.hoperun.client.GetMyAppFromServerActivity.serial(GetMyAppFromServerActivity.java:57)rn11-01 19:53:19.678: W/System.err(10593): at com.hoperun.client.GetMyAppFromServerActivity.onCreate(GetMyAppFromServerActivity.java:26)rnrnrnrn[/code]
java 序列化问题总结
问题一:为什么会报"本地class的唯一id和流中class的唯一id不匹配错误" 答:因为你使用了对象的序列化,但是却没有显示的指明serialVersionUID。如果不显示的指明serialVersionUID,jdk在序列化的时候会根据字段和特定的算法生成一个serialVersionUID,当属性有变化时这个id发生了变化,所以会出现不匹配的错误。 问题二:为什么要做序列化 ...
java 序列化问题
公司有一个项目,以前用java.io.Serializable进行的序列化,现在版本升级要用java.io.Externalizable进行序列化。现在要求是如何将以前用java.io.Serializable序列化保存在硬盘中的内容通过java.io.Externalizable反序列化读出来?rn例子:[code=Java]public class 序列化测试 implements java.io.Externalizable rn rn private static final long serialVersionUID = 9009520524079633891L;rn rn public String valueA = "123456"; rn public int valueB = 100; rn rn public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException rn /*valueA = in.readUTF();rn valueB = in.readInt();*/rn rnrn public void writeExternal(ObjectOutput out) throws IOException rn /*out.writeUTF(valueA); rn out.writeInt(valueB); */rn rnrn rn public static void main(String[] args)throws Exceptionrn rn /* 序列化测试 aa = new 序列化测试();rn java.io.OutputStream os = new java.io.FileOutputStream( "d:/aaa.txt" );rn java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream( os );rn oos.writeObject( aa );rn oos.flush();rn oos.close();*/rn rn java.io.InputStream is = new java.io.FileInputStream( "d:/aaa.txt" );rn rn java.io.ObjectInputStream bis = new java.io.ObjectInputStream( is );rn 序列化测试 bb = (序列化测试)bis.readObject();rn System.out.println( bb.valueA );rn System.out.println( bb.valueB ); rn rn rn rn[/code]rn说明:先用java.io.Serializable序列化,在用java.io.Externalizable进行反序列化会报异常:rn这是异常信息:rnException in thread "main" java.io.InvalidClassException: 序列化测试; Serializable incompatible with Externalizablern at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)rn at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)rn at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)rn at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)rn at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)rn at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)rn at 序列化测试.main(序列化测试.java:51)
java序列化的问题
求一个应用了JAVA序列化的小例子
java匿名内部类序列化问题
遇到一个序列化问题。明明对象已经实现了序列化接口,但是报错无法序列化外部的类(内心os,跟外部类什么关系啊)。 最后发现原因是我使用的对象是匿名内部类的子类,继承的父类实现了序列化接口。 匿名内部类的对象会伴随主对象的整个生命周期,并且匿名类必然不会继承序列化接口支持序列化,所以在执行序列化时会发生无法序列化外部类的情况,因为匿名类对象也是一个需要序列化的成员。
java匿名类序列化问题
java不同语法的应用在duboo服务中产生诡异的序列化错误,两种语法表达,一个无法序列化而另外一个正常
JAVA的序列化问题
今天工作时发现一个序列化的问题: 基类(类A)没有实现序列化接口(Serializable),而子类(类B)实现了序列化接口,对子类对像进行序列化,然后反序列化,这里发现反序化后的对象在基类的中的很多属性都变成了null. publicabstractclassFirstLevel{//基类 privateMapmap; public...
java序列化版本问题
本人做了一个小程序.java做服务器端,序列化对象.然后c#做客户端.反序列化接收.双方都用的是socket,现在java序列化过来以后.rnrnjava序列化代码如下:rnrn TestSerial se=new TestSerial();rn sout.writern sout.writeObject(se);rn sout.flush();rn sout.close();rn rnrn我用C#是这样接收的:rnrn socket.Receive(bytesReceive);rn SetText(bytesReceive);rnrn socket.Shutdown(SocketShutdown.Both);rn socket.Close();rnrn rn private void SetText(byte[] data)rn rn //反序列化 rn BinaryFormatter bf = new BinaryFormatter();rn object obj = null;rn using (Stream stream = new MemoryStream(bb, 0, bb.Length))rn rn obj = bf.Deserialize(stream);rn rn rnrn总是报一个错误:二进制流"0"不包含有效的BinaryHeader......rn网上查了说是和版本有关.这种问题具体应该改怎么解决啊?
Java序列化相关问题
我有个问题,如下:rn我在Java网络编程方面时,新建了两个包,分别是Server和Client,在Server包中有一个Person类,Server的程序在收到Client发送的指令时,向Client返回一个Person的实例(即序列化Person,将其发送),那么在Client程序中读取语句“Object person = objIn.readObject();".我想问的是在Client不引入Server中的Person.java时,怎么将Client收到的这个Object正确的解释为Person。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/12.gif][/img]
关于java的序列化问题
写这篇文章的起因是在面试的过程当中,别人曾问到我几个问题。(1)java如何实现序列化的?(2)序列化的serialVersionUID有什么作用。(3)static修饰的变量能够序列化吗?如果不能,那么怎么样自己实现喃?依次对于上述问题进行解答。1.如何实现对象序列化。(1)实现Serializable接口,并不用做任何操作。其大致规则如上。(2)实现Externalizable接口,Exter...
java 序列化的问题
序列化后的一个文件,想先读取最后一个对象,这样有办法实现吗?必须从头开始吗?
Java 静态变量的序列化问题
java 静态变量无法被序列化吗?为什么我写的一个代码在数据层的类中用了静态变量来保存序列化对象再把它写进序列化文件是可以的。。。这是怎么回事啊?求大神指导???[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/1.gif][/img]
JAVA匿名内部类序列化的问题
如题,在一个静态方法中写一个匿名内部类可以序列化,但是在非静态方法中却不行,为什么?n反编译后的Class文件中后者的构造方法中有一个对外部类引用的参数但是前者却没有,会是这个原因吗?
Java序列化和反序列化问题
Transient 关键字 transient修饰符仅适用于变量,不适用于方法和类。在序列化时,如果我们不想序列化特定变量以满足安全约束,那么我们应该将该变量声明为transient。执行序列化时,JVM会忽略transient变量的原始值并将默认值保存到文件中。因此,transient意味着不要序列化。 Static 静态变量不是对象状态的一部分,因此它不参与序列化。所以将静态变量声明为t...
java并发问题
[img=https://img-bbs.csdn.net/upload/201606/30/1467289327_949478.png][/img]rnrn这个程序用来实现计数的,我觉得volatile修饰符可以去掉。因为“synchronized ”保证了value具有可见性,所以不需要volatile
java并发的问题
不知道大家用没用过注解方式。rn@GuardedBy("this") private Integer count;rn使用这种内置锁,编译器直接报错。rn是不是需要引入什么包?rn分不多了,请各位见谅啊
java并发DCL问题
java并发之单例模式,在早期的jvm中,synchronized存在巨大的性能开销。如果getInstance的竞争很小,甚至没有竞争,那么synchronized就存在很大的冗余性能开销。所以通过双重检查机制避免不必要的锁操作。
Java并发问题总结
1. Java内存模型 所有变量都存储在主内存中。这里的主内存只是虚拟机内存的一部分,可以和物理主内存类比。每条线程都有自己的工作内存。工作内存可以和处理器高速缓存类比。工作内存中保存了主内存中变量的拷贝,线程所有的操作只能在工作内存中进行,不同线程不能访问对方的工作内存,只能通过更新到主内存中的方式来传递线程间的变量值。 主内存与工作内存间的交互操作都具有原子性,包括 ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪对主
java并发之并发工具类
java并发之并发工具类,并发工具类有很多,这里主要介绍了CyclicBarrier、CountDownLatch、Semaphore、Exchanger
java 并发(并发工具包)
java 并发(并发工具包) ##13个原子操作类 ####原子基本类型 AtomicBoolean AtomicInteger AtomicLong 常用方法如下: int addAndGet(int delta): 以原子方式将输入的数值与实例中的值(AtomicInteger里的value)相加,并返回结果。 boolean compareAndSet(int expect,int u...
java并发---并发的基本概念
并发:    同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行。高并发(High Concurrency):    是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很...
JAVA中的并发问题!
我一直都很不理解servlet的做法,对于并发的处理机制.rn例如:在service方法中,写了一个同步锁(synchronized),那么,是不是有一个用户登陆进去,进入了锁,其他用户就进不了这个页面呢?假如我在锁里面做一个for循环,循环次数接近无限大,是不是其他用户就不能进入这个页面?rn另外一个就是servlet中的工厂模式.rn我做了一个dao的单例模式,在action中,实例化这个单例模式,那这个实例是怎么运用的呢?每个人都是公用这个单例,就不会存在并发问题吗?毕竟只有一个实例,在内存中是怎么分配的?好象有10000个IP同时访问这个页面,这个单例如何分配?rnrn谢谢各位高手给我指点!~
JAVA并发| 炒菜问题
炒菜问题 买菜和买配料先后顺序不一定,但炒菜一定在这两个的后面 用CountDownLatch实现 package com.xiaobu.learn.concurrent; import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.util.concurrent.*; /** * @author...
有关java并发问题
我遇到这样一个问题,但不知道如何去实现,有500万个用户同时访问一个页面,发现死页面问题。如何去解决呢?
Java 并发问题
各位大侠:rnrn小弟有一个问题想问一下,Java中自带的concurrent并发会不会造成阻塞,因为我在我的应用中采用了这种技术,但是一次性并发数量达到5000个线程发现会出现问题,请问一下concurrent处理的机制,谢谢了!
Java并发问题
[code=Java]rnpublic class ThreadPre rnrn rn public static void main(String[] args) throws IOException rn ServerSocket socket = new ServerSocket(80);rn rn while(true)rn final Socket connection = socket.accept();rn rn Runnable task = new Runnable() rn rn @Overridern public void run() rn rn handle(connection);rn rn rnrn rn ;rn rn new Thread(task).start();rn rn rnrn[/code]rn请问上面的代码socket为什么要用final声明?这是我在《Java并发编程实践》看到的例子,请解释下
java 并发 synchronized问题
rn 上码:rn  rnrn  输出:rn  rn  rnrn  问题:rn  rn t1和t2线程,分别调用的是CleanRoom类同一实例c的不同方法,并且这两个方法没有把这个实例C锁上,两个方法所锁定的资源分别是c实例的两个不同的属性,按道理来说,这两个线程应该是并发执行的。rn 但是事实不如此,t2线程在t1线程没有执行完成前,始终处于等待状态。rn  rn 求解!rn 当stuClean方法中调用TimeUnit.SECONDS.sleep(3)后,macClean()方法应该有机会得到执行啊?rn
java 并发 并发
还不错的一本书
java序列化问题 ObjectIputStream问题
不知道前辈们是不是遇到过这问题 我就不复制代码了 看着也烦得慌,n就是java写序列化与反序列化问题 ,n我遇到的问题就是 有一个文件 里面序列化了一个List集合,n单独new一个ObjectIputStream 操作他 拿出这个List没什么问题,n当我在同一个main方法里 想进行复杂点的操作 同时还new了ObjectOutputStream时,n一使用readObject()方法 就会抛EOFException异常 ,我实在是看不出我代码有什么问题,n感觉是我理论知识有欠缺 ,不知道那个大哥能得兄弟讲解下啊
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法