繁体   English   中英

如何在线程池执行器中执行多个对象?

[英]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.

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