2015-03-06 2 views
0

При написании тему в Java (например, для обработки различных клиентов в Java):написание потоков в Java

1) Что должно быть причины делать это за счет расширения класса Thread, или реализации Runnable интерфейс?

2) Как можно дать вновь созданному потоку имя для доступа к нему в программе?

3) Как избежать ситуации, когда некоторые потоки имеют одно и то же имя?

+1

Пожалуйста задать один вопрос на каждый вопрос. – Pshemo

+1

[SO объясняет, что продолжается Threads vs реализует Runnable] (http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread) – gtgaxiola

+0

Интерфейс Rubnable является предпочтительным. – CaffeineToCode

ответ

2

Несколько слов о 1):

Реализация Runnable делает ваш класс более гибким.

Класс, который реализует Runnable, не является нитью и просто классом. Чтобы Runnable стал Thread, вам нужно создать экземпляр Thread и передать себя в качестве цели.

Расширяя Thread, каждый из ваших потоков имеет уникальный объект, связанный с ним, тогда как при реализации Runnable многие потоки могут совместно использовать один и тот же исполняемый экземпляр.

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

О 2)

Имени ниже Нити [MyThread]

Thread myThread =new Thread(new Runnable(){ 
    public void run(){ 

    //code 

    }}); 

myThread.start(); //start it 

О 3)

об именах ... Если вы не заботиться, чтобы получить доступ к теме по имени как пример выше, вы можете просто Thread и в него добавить код, который имеет какое-то желание, которое вы хотите. Например, вы можете иметь флаг и сделать его ложным. Thread просто закончит свою работу, и это все закончилось.

new Thread(new Runnable(){ 
    public void run(){ 

    //example code 
    while(flag==true){ 
    System.out.println("Yeah i am true "); 
    //Thread.sleep(200); //Makes The Thread sleep 
    } 

    }}).start(); //create and start by default 

Здесь

public class Server{ 

    public Server(){ //constructor 

    Thread client = ClientMethod("Alex"); 
    System.out.println("i am Client "+client.getName()); 
    } 


    //Make a Thread for a specific Client 
    public Thread ClientMethod(String clientName){ 

    Thread client = new Thread(new Runnable(){ 
     public void run(){ 

     //do someWork 
     //Then finish 

     }//end of run method 
    }); 

    client.setName(clientName); //set the NameOfThread to clientName 
    client.start(); //start it 

    return client; //return the Thread of this specific Client(as Object) 

    } 


//Main Method 
    public static void main(String[] args){  
     new Server();     
    } 

}//End of Class [Server] 
+0

2) Где имя, которое я выбираю для темы? –

+0

3) в этом случае имя будет ..? –

+0

@Day_Dreamer Я отредактировал его – crAlexander

1

документации страница here описывает это лучший

  • Есть два способа создать новый поток выполнения. Один из них - объявить класс подклассом Thread. Этот подкласс должен переопределить метод run класса Thread. Затем может быть выделен и запущен экземпляр подкласса.

  • Другой способ создания потока - объявить класс, реализующий интерфейс Runnable. Затем этот класс реализует метод run. Затем экземпляр класса может быть выделен, передан как аргумент при создании Thread и запущен.

  • Каждый поток имеет имя для идентификации. У более чем одного потока может быть одно и то же имя. Если имя не указано при создании потока, для него создается новое имя.

Если не указано иное, передавая пустой аргумент конструктора или метода этого класса вызовет NullPointerException быть выброшен.

Для решения именования: АНИ ясно показывает, что конструктор для резьбы:

Thread(String name) 

имеет аргумент, который позволяет назвать нить.

как разница между двумя: Резьба реализует runnable. Классы, которые предназначены для запуска кода, пока они активны, могут выбрать реализацию либо runnable, либо extend thread. Расширение потока дает вам дополнительные функции, которые поставляются с Thread, а runnable - нет.

+0

Я просто прочитал его, и я вижу, что они дают два пути для написания тем, но они не учитывают причины выбора. –

+0

Хотелось бы, чтобы у меня была моя книга программирования Java, я объяснил это совершенно. – CaffeineToCode

0

2) перегруженный c'tor:

Thread (null, target, gname) 

начинается работоспособным и присвоить ему имя gname

если специфический именование нити Автоматического имя будет: «тема -» + n, где n - целое число.

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