2016-10-25 2 views
0

Я новичок в многопоточности, и я запутался, если этот метод является потокобезопасным или нет, поскольку я не делаю нового в HttpURLConnection conn ............ ..........................Явная локальная переменная Java Thread Безопасность

 protected byte[] someMethod(Authenticator authenticator, String url, boolean doPost) throws Exception { 
    try { 
     URL aUrl = new URL(url); 
     strBldr = new StringBuilder(); 
     AuthenticatedURL.Token token = new AuthenticatedURL.Token(); 
     TestConnectionConfigurator connConf = new TestConnectionConfigurator(); 
     AuthenticatedURL authUrl = new AuthenticatedURL(authenticator, connConf); 
     HttpURLConnection conn = authUrl.openConnection(aUrl, token); 
     if (!connConf.invoked) 
      throw new IOException("failed to invoked"); 
     String tokenStr = token.toString(); 
     if (doPost) { 
     conn.setRequestMethod("POST"); 
     conn.setDoOutput(true); 
     } 
     conn.setRequestProperty("Accept", "application/octet-stream"); 
     conn.setDoOutput(true); 
     conn.connect(); 

     if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { 

      BufferedInputStream in = new BufferedInputStream(
          conn.getInputStream()); 

      ByteArrayOutputStream byteArraySt = new ByteArrayOutputStream(); 
       int counter; 
       while ((counter = in.read()) != -1) { 
        byteArraySt.write(counter); 
       } 
       byte [] bArray = new byte[byteArraySt.toByteArray().length]; 
       bArray = byteArraySt.toByteArray(); 


      in.close(); 
      return bArray; 
     } 
+0

Подробнее о безопасности потоков: http://www.javaworld.com/article/2076747/core-java/design-for-thread-safety.html –

+0

Если все переменные являются локальными и остаются такими, вопрос о безопасность потоков не может возникнуть. Почему вы устанавливаете 'doOutput' в true, а затем ничего не выводите? – EJP

ответ

0

Как правило, для написания безопасного для потока кода вы должны сосредоточиться на изменчивых общее состояние. Локальные переменные не разделяются, и поэтому они не являются проблемой.

Ваш код должен быть потокобезопасным, но вы должны проверить, является ли объект authenticator, который передан методу (и, следовательно, может использоваться другими потоками), фактически является потокобезопасным.

+0

Спасибо за ответ. Я передаю «новый аутентификатор» из другого метода. и он не объявлен как переменная экземпляра – private5181

+0

другой вопрос, который у меня есть, не «подключен» к общему объекту? – private5181

+0

@ private5181 Это локальная переменная метода. – EJP

 Смежные вопросы

  • Нет связанных вопросов^_^