有如下几个类:
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)问的解决办法一样?
真心求教,成功发财了发个大红包!