code: @Override
      public void run() {
          try {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){  
                  Tr.debug(tc, "Run WriteListenerRunnable start , current thread -->" + Thread.currentThread().getName());
              }
              // clean up everything on this thread
              WebContainerRequestState reqState = WebContainerRequestState.getInstance(false);
              if (reqState != null) {
                  reqState.init();
              }
              // Push the original thread's context onto the current thread, also
              // save off the current thread's context
              _tcm.pushContextData();
  
              // call onWritePossible
              synchronized (this._out) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){  
                      Tr.debug(tc, "Invoking the onWritePossible first time");
                  }
                  WebContainerRequestState.getInstance(true).setAttribute("com.ibm.ws.webcontainer.upgrade.WriteAllowedonThisThread", true);
                  this._listener.onWritePossible();
  
              }
          } catch (Exception e) {
              // If any other exception is thrown then call error which will set
              // exception from error which will allow application to write error
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){  
                  Tr.debug(tc, "An exception occurred during the onWritePossible : " + e);
              }
              _cb.error(_out.getBufferHelper().get_vc(), e);
  
          } finally {
              // Revert back to the thread's current context
              _tcm.popContextData();
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){  
                  Tr.debug(tc, "Run WriteListenerRunnable done");
              }
          }
      }
docs: /*
  (non-Javadoc)
  
  @see java.lang.Runnable#run()