简体   繁体   中英

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);
    }
}

Above program Threadpool executor execute each time different object value received. in this case example i have send obj1,obj2. if obj1 executed that time obj2 will be waiting stage. that object released next object will be execute. but my program first object only executed. Note: first object executed get the respose then another object want to be executed

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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM