2 service96 service96 于 2016.03.02 18:35 提问

Java写交易客户端(多线程、对象数据传送等简单问题)

有如下几个类:

1、Ticker类
//此Ticker为简单java类,其属性与服务器传来的json字段对应,通过Decoder类反系列化json
//反系列化以后的数据,用以做逻辑判断,符合逻辑,则向服务器发出某种请求

public class Ticker implements Serializable {
private static final long serialVersionUID = 2015022601L;
private volatile Double buy;
private volatile Double contractId;

public void setBuy(Double buy) {
    this.buy = buy;
}

public void setContractId(Double contractId) {
    this.contractId = contractId;
}

}

public Double getBuy() {
    return buy;
}

public BigDecimal getContractId() {
    return contractId;
}

public Ticker() {
    super();
}

public Ticker( Double buy, Double contractId) {
    this.buy = buy;
    this.contractId = contractId;

}

}

2、Decoder类
//此类接收服务器传来的json(msg字符串),采用Gson将其反系列化
//此msg消息一直不断推送过来,比如第一次推送{buy:100,contractId:20},下一次可能是{buy:50,contractId:305}

public class Decoder implements Abc{
@Override
public void onReceive(String msg){
System.out.println(msg);

       if (msg.contains("ticker")) {
          Gson gson=new Gson();
          Ticker ticker=gson.fromJson(msg, Ticker.class);  //反系列化后得到的数据存于ticker对象
       }

}

}

3、Test类
//此类利用反系列化后的数据进行判断,然后向服务器发出某些请求

public class Test{
此类里需要用到Decoder里得到的ticker对象的buy及contractId属性值,
比如此类一直在做以下判断
if (buy>contractId){
向服务器发出一次请求
}

问题:
(1),Test类怎么才能得到Decoder类里实例化的ticker对象的属性值(buy,contractId),是在Ticker加上一个构造方法?还是在Decoder类里写一个方法?或者其他?请给出实际代码。
(付:这是一个线程间通讯的问题么?)

(2),Decoder类一直每秒几次的转换服务器推送来的json,每一次得到的ticker对象地址不一样,其ticker只有最近一个的属性有用,这样是不是产生了大量的垃圾,还是说虽然地址不一样,但后产生的ticker自动覆盖了前面的ticker对象?

(3),如果此程序采用多线程,同时还使用SWT写了一个UI类,是否要再写一个类用来更新ticker对象的属性到UI界面上(或者采用Eclipse数据绑定的办法)?
     现在相当于:
               Decoder类一直不断在进行json转换,
               UI类一直在把ticker对象的属性数据更新到UI界面(或者用其他办法更新上去),
               Test类也一直在使用ticker的属性值进行数据的逻辑判断,
               此程序是否应该是至少三个线程?那具体怎么实现多线程(每个类都实现Runnable接口?)?主方法是该放在UI类里,还是放在客服端里(Test类是否可作为客服端)?
               请请给出具体多线程实现的代码?

(4)如果Test类用于逻辑判断的属性值buy和contractId不采用Decoder类里产生的,而是去UI界面上再次取得,那这个取得过程是否与(2)问的解决办法一样?

真心求教,成功发财了发个大红包!

1个回答

devmiao
devmiao   Ds   Rxr 2016.03.02 19:30
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java socket多线程 接收xml
java socket多线程 接收xml2009-08-21 17:25这段时间做了个项目,不过觉得一直是我在写,我们总监再改。。看样子自己的代码能力太差了。而且乱七八糟的啦。。现将代码分享一下吧 :是从客户端接收xml进行一定的解析,然后入库最后返回吧 中间复杂的逻辑就不说了 。。。SocketServer.javapackage com.socket;
使用Socket创建带连接池的多线程文件传输服务器和客户端实例
1.创建带连接池的多线程文件传输服务器和客户端 . 介绍 我们现在已经拥有的 MultithreadedServer 每当有客户机申请一个连接时都在一个新 Thread 中创建一个新 ConnectionHandler。这意味着可能有一捆 Thread “躺”在我们周围。而且创建 Thread 的系统开销并不是微不足道的。如果性能成为了问题(也请不要事到临头才意识到它),更高效
java多线程以及java网络编程实现简单的聊天系统
该系统采用java多线程技术及java网络编程技术实现一个基于C/S的聊天系统,系统分为客户端及服务器端: 服务器端主要涉及到以下几个线程: 1.在服务器启动之后会启动一个名为ConnectThread的线程,该线程用来处理用户连接; 2.在服务器启动之后同时会启动一个名为ServerUDP的线程,由名字知道该线程通过UDP进行数据传输的,它是接收用户传过来的消息,并将消息转发给所有在线用户
java多线程socket实现简单的聊天
server端:需要注意的是死循环acept,然后对每一个客户端开两个线程,分别是读写,这样使得可以全双工通信,另外注意读写的方法,比如读的时候的nextLine,要记得在发送的时候加上换行符,否则读不到。 package com.min.testsocket; import java.io.IOException; import java.io.PrintWriter; impo
JAVA网络编程中关于一个客户端/服务器中多线程并发文件传输的程序问题
-
【Java 单例模式】Java 单例模式在多线程环境中可能存在的问题
在多线程环境下,使用延迟加载的方式实现单例模式,会出现错误。 例如,使用如下方式实现单例类:package study20170307;/** * Created by apple on 17/3/7. */ public class SingleJavaTest { private static SingleJavaTest singleJavaTest = null; publ
直接在服务器与客户端之间传输对象
客户端与服务器之间传输对象 一、前言     1.网络编程的使用十分广泛,且相当重要,一个有用的Android 程序一定涉及数据对象的传输处理。     2.本文将以实例分析一个用户对象是怎样在网络中传输的。     具体实现之前,大致分析一下其过程原理:     原理如下:         User对象 --> json 数据 --> 手机客户端 --> 服务器 --> js
服务器——客户端 传递对象
package com.xiuye.rmi; import java.io.Serializable; public interface A extends Serializable{ public void print(); } package com.xiuye.rmi; public class AImpl implements A{ /** * */ pr
一个简单的java多线程例子
现在有这样一个任务,有一份手机号列表(20W),有一份话单的列表(10W),要统计哪些手机号没有出现在话单中,哪些手机号在话单中出现了不止一次。 想到的最直接的方式,就是两层循环去遍历,虽然此方法比较笨,但目前还没有想出更好的办法。 一开始使用单线程来处理,代码是随手写的并没有进行重构,只是做一个简单的说明: package tool; import java.util.List; pu
java多线程,多个客户端之间发送文件
java通过利用TCP,Socket和ServerSocket的类,进行消息的传递,。通过while(true),形成点对点的单次通信。不过必须得等待对方的回复,才可以进行下一步。 之后利用多线程,实现刷屏多次聊天。  利用这一点思路,将输入的字符串转化成文件。来进行文件的传递,以及多用户发送。 package tcom.tcp.test; import java.io.BufferedRe