【发布时间】:2015-10-23 08:52:31
【问题描述】:
public final class ServiceThread implements Runnable,ISoapResultProcess {
private SOAPServiceManager soapservice;
private ServiceSync obj=new ServiceSync();
private Context mContext;
int value;
private SyncUtils util;
private ISoapResultProcess consumer;
private boolean flag=true;
private ThreadPoolExecutor mExecutor;
private boolean boollock=true;
private Object objnew=new Object();
public ServiceThread(ServiceSync a,Context context) {
this.obj=a;
util = SyncUtils.getInstance(context);
this.mContext=context;
consumer=this;
if (soapservice == null) {
soapservice = new SOAPServiceManager(context);
}
}
public void run() {
// Do sending server update request here
if (soapservice.haveNetworkConnection()) {
int op = obj.getOpconst();
Log.e("val", ""+op);
String strType=obj.getOptype();
Log.e("strType", ""+strType);
boolean boolflag=obj.getOpflag();
if(strType.contentEquals("upload"))
{
util.syncProcess(op, boolflag,consumer);
}else
{
util.downloadsyncProcess(op, boolflag,consumer);
}
flag=util.getOpflag();
synchronized (objnew) {
try {
objnew.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("runflag0", "-"+flag);
/*if(flag)
{
flag = false;
run();
return;
}*/
return;
}
}
}
@Override
public void processResponse(JSONObject result, String method) {
// TODO Auto-generated method stub
boollock=java.lang.Thread.holdsLock(objnew);
if(boollock)
{
objnew.notify();
}
mExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
ServiceThreadlocal tempThreadServiceThread = new ServiceThreadlocal(1,method,true, mContext,result,consumer);
mExecutor.execute(tempThreadServiceThread);
}
}
上述程序线程池执行器每次收到不同的对象值时执行。在本例中,我发送了 obj1,obj2。如果 obj1 执行到那个时候 obj2 将处于等待阶段。该对象释放下一个对象将被执行。但我的程序第一个对象只执行。注意:执行的第一个对象获得响应,然后要执行另一个对象
【问题讨论】:
-
为什么对象要等待?它是一个多线程范例
-
第一个对象发送到服务器的请求,接收响应然后只执行另一个对象。那是场景
-
为什么两个对象不能一起上服务器?如果它是一个请求依赖于先前操作的响应的请求响应机制,是否不需要并行处理?
-
你想要做的是让一个同步线程执行..一个线程在另一个线程结束时执行。对吗?
-
threadpoolexecutor 是用 LinkedBlockingQueue 实例化的。只需将新的 runnable 添加到同一执行程序的该队列中,它应该可以工作。 (目前看来你每次都创建一个新的 thredpoolexecutor 和一个新的linkedblockingqueue)
标签: java android multithreading threadpoolexecutor