Criando uma programação concorrente Java (a) fio
Há três maneiras de criar um ready-made três cada um tem as suas vantagens, cada um tem suas próprias características. Flexibilidade no projeto podem ser selecionados de acordo com suas necessidades.
Implementação de um
Implementação é conseguido usando uma interface Runable para executar vários segmentos, mas há um lado negativo é executado método de execução é sem valor de retorno, nem pode lançar uma exceção.
public class ThreadOne implements Runnable {
private int a = 10;
@Override
public void run() {
System.out.println("线程" + Thread.currentThread().getName() + a);
}
}
class Test {
public static void main(String[] args) throws Exception {
Thread thread = new Thread(new ThreadOne());
thread.start();
}
}
复制代码
classe Thread é criada, eo objeto que implementa a interface Runable passado para o segmento. Passe a chamada de método start para executar threads.
Implementar Método dois
Método dois herança classe Thread para alcançar empregado porque java é uma linguagem única herança, esta classe herda a classe Thread, assim você pode não herdar outras classes. Além disso, este método também não pode obter o valor de retorno do método de execução eo método de execução não pode lançar uma exceção.
public class ThreadTwo extends Thread {
private int a = 10;
@Override
public void run() {
System.out.println("线程" + Thread.currentThread().getName() + a);
}
}
class TestTwo {
public static void main(String[] args) throws Exception {
ThreadTwo threadTwo = new ThreadTwo();
threadTwo.start();
}
}
复制代码
implementação de três
Método três para compensar um momento para perceber os dois primeiros métodos de desvantagem esse segmento pode chamar para obter o valor de retorno, chamada de método pode lançar uma exceção, mas o código é mais complicado do que os dois primeiros, através da implementação da interface Callable e depois implementar mobilizável parâmetros de configuração de interface classe de entrada através de FutureTask, e depois passou para o segmento futuro por parâmetros estruturais, de fato jogo FutureTask é um papel de trânsito.
public class ThreadThree implements Callable {
private int a = 10;
@Override
public Object call() throws Exception {
synchronized (this){
return ++a;
}
}
}
class TestThree {
public static void main(String[] args) throws Exception{
ThreadThree threadThree = new ThreadThree();
for (int i = 0; i < 7; i++) {
FutureTask<ThreadThree> threadThreeFutureTask = new FutureTask<ThreadThree>(threadThree);
Thread thread = new Thread(threadThreeFutureTask);
thread.start();
System.out.println("线程返回值为:" + threadThreeFutureTask.get());
}
System.out.println("线程执行完毕");
}
}
复制代码
resumo
- Implementação e realização de uma segunda abordagem é relativamente simples em comparação com o terceiro implementação, mas a desvantagem é incapaz de executar método é nenhum valor de retorno, o método execute não pode lançar uma exceção, mas o terceiro implementação pode obter chamada de método retorna uma aquisição de valor, mas também você pode lançar uma exceção.
- Implementação de uma terceira implementação do método é usado na implementação da interface, mas é usado de duas maneiras de conseguir a herança classe Thread, que seriam ligados java herança simples