[英]How can execute multiple object in threadpool executor?
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);
}
}
上面的程序Threadpool执行器每次接收到不同的对象值时执行。 在这种情况下,我已发送obj1,obj2。 如果obj1执行了该时间,则obj2将处于等待阶段。 该对象释放的下一个对象将被执行。 但是我的程序第一个对象只执行了。 注意:第一个执行的对象获得重新放置,然后另一个要执行的对象
public ServiceThread(ServiceSync a,Context context) {
mExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
this.obj=a;
util = SyncUtils.getInstance(context);
this.mContext=context;
consumer=this;
if (soapservice == null) {
soapservice = new SOAPServiceManager(context);
}
}
//...
@Override
public void processResponse(JSONObject result, String method) {
// TODO Auto-generated method stub
boollock=java.lang.Thread.holdsLock(objnew);
if(boollock)
{
objnew.notify();
}
ServiceThreadlocal tempThreadServiceThread = new ServiceThreadlocal(1,method,true, mContext,result,consumer);
mExecutor.submit(tempThreadServiceThread);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.