2013-08-30 5 views
0

Был проведен Study of Common Pitfalls in Simple Multi-Threaded Programs, проведенный Вашингтонским университетом. Обнаруженные ошибки были разделены на 3 категории: «Гонки данных», «Тупик» и «Разное».
В категории Разное была ошибка, я не понимаю:Общие ошибки в простых многопоточных программах

Ненужное использование прерывания отключив и приобретение блокировки и освободить

Что прервать отключение и блокировку приобретения и освободить средний ?
Почему он не должен использоваться вместе?

Может ли кто-нибудь объяснить это?

ответ

1

Ненужное использование прерывания отключив

public void run(){ 

    while(true){ 
    //some deep logic 
     try{ 
      Thread.sleep(5000); 
     }catch(InterruptedException){ 
      //eating away the exception without taking any steps 
     } 
    } 
} 

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

Ненужное использование приобретения замка и освободить

class Test{ 

    private int counter = 0; 

    public synchronized void increment(){ counter++; } 

    public synchronized void decrement(){ counter--;} 

    //Unnecessary placement of synchronized block here 
    public synchronized void printString(){ 
     //this method does not use counter so no need to use synchronized block 
    } 
}